Maison > développement back-end > Tutoriel C#.Net > Quelles sont les méthodes d'application des tableaux de caractères et des chaînes en langage C ?

Quelles sont les méthodes d'application des tableaux de caractères et des chaînes en langage C ?

coldplay.xixi
Libérer: 2020-06-17 11:48:40
original
2803 Les gens l'ont consulté

Quelles sont les méthodes d'application des tableaux de caractères et des chaînes en langage C ?

c语言字符数组与字符串应用方法是什么?

c语言字符数组与字符串应用方法:

1、字符数组的定义与初始化

字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。

char str[10]={ 'I',' ','a','m',' ',‘h','a','p','p','y'};
Copier après la connexion

即把10个字符分别赋给str[0]到str[9]10个元素

如果花括号中提供的字符个数大于数组长度,则按语法错误处理;若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即 '\0' )。

2、字符数组与字符串

在c语言中,将字符串作为字符数组来处理。(c++中不是)

在实际应用中人们关心的是有效字符串的长度而不是字符数组的长度,例如,定义一个字符数组长度为100,而实际有效字符只有40个,为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”,以字符'\0'代表。如果有一个字符串,其中第10个字符为'\0',则此字符串的有效字符为9个。也就是说,在遇到第一个字符'\0'时,表示字符串结束,由它前面的字符组成字符串。

系统对字符串常量也自动加一个'\0'作为结束符。例如"C Program”共有9个字符,但在内存中占10个字节,最后一个字节'\0'是系统自动加上的。(通过sizeof()函数可验证)

有了结束标志'\0'后,字符数组的长度就显得不那么重要了,在程序中往往依靠检测'\0'的位置来判定字符串是否结束,而不是根据数组的长度来决定字符串长度。当然,在定义字符数组时应估计实际字符串长度,保证数组长度始终大于字符串实际长度。(在实际字符串定义中,常常并不指定数组长度,如char str[ ])

说明:'\n'代表ASCII码为0的字符,从ASCII码表中可以查到ASCII码为0的字符不是一个可以显示的字符,而是一个“空操作符”,即它什么也不干。用它来作为字符串结束标志不会产生附加的操作或增加有效字符,只起一个供辨别的标志。

对C语言处理字符串的方法由以上的了解后,再对字符数组初始化的方法补充一种方法——即可以用字符串常量来初始化字符数组:

char str[ ]={"I am happy"}; 可以省略花括号,如下所示

char str[ ]="I am happy";

注意:上述这种字符数组的整体赋值只能在字符数组初始化时使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素一一赋值,下面的赋值方法是错误的

char str[ ];
  str="I am happy";
Copier après la connexion

不是用单个字符作为初值,而是用一个字符串(注意:字符串的两端是用双引号“”而不是单引号‘'括起来的)作为初值。显然,这种方法更直观方便。(注意:数组str的长度不是10,而是11,这点请务必记住,因为字符串常量"I am happy"的最后由系统自动加上一个'\0')

因此,上面的初始化与下面的初始化等价

char str[ ]={'I',' ','a','m',' ','h','a','p','p','y','\0'};
Copier après la connexion

而不与下面的等价

char str[ ]={'I',' ','a','m',' ','h','a','p','p','y'};
Copier après la connexion

前者的长度是11,后者的长度是10.

说明:字符数组并不要求它的最后一个字符为'\0',甚至可以不包含'\0',向下面这样写是完全合法的。

char str[5]={'C','h','i','n','a'};
Copier après la connexion

可见,用两种不同方法初始化字符数组后得到的数组长度是不同的。

#include <stdio.h>
void main(void)
{
char c1[]={&#39;I&#39;,&#39; &#39;,&#39;a&#39;,&#39;m&#39;,&#39; &#39;,&#39;h&#39;,&#39;a&#39;,&#39;p&#39;,&#39;p&#39;,&#39;y&#39;};
char c2[]="I am happy";
int i1=sizeof(c1);
int i2=sizeof(c2);
printf("%d\n",i1);
printf("%d\n",i2);
}
Copier après la connexion

结果:10 11

3、字符串的表示形式

在C语言中,可以用两种方法表示和存放字符串:

(1)用字符数组存放一个字符串

  char str[ ]="I love China";
Copier après la connexion

(2)用字符指针指向一个字符串

   char* str="I love China";
Copier après la connexion

对于第二种表示方法,有人认为str是一个字符串变量,以为定义时把字符串常量"I love China"直接赋给该字符串变量,这是不对的。

C语言对字符串常量是按字符数组处理的,在内存中开辟了一个字符数组用来存放字符串常量,程序在定义字符串指针变量str时只是把字符串首地址(即存放字符串的字符数组的首地址)赋给str。

两种表示方式的字符串输出都用

printf("%s\n",str);
Copier après la connexion

%s表示输出一个字符串,给出字符指针变量名str(对于第一种表示方法,字符数组名即是字符数组的首地址,与第二种中的指针意义是一致的),则系统先输出它所指向的一个字符数据,然后自动使str自动加1,使之指向下一个字符...,如此,直到遇到字符串结束标识符 " \0 "。

4、对使用字符指针变量和字符数组两种方法表示字符串的讨论

Bien que les tableaux de caractères et les variables de pointeur de caractères puissent être utilisés pour stocker et exploiter des chaînes, il existe des différences entre eux et ne doivent pas être confondus.

4.1. Le tableau de caractères est composé de plusieurs éléments, chaque élément contient un caractère ; la variable pointeur de caractère stocke l'adresse (la première adresse du tableau chaîne/caractère), et ce n'est en aucun cas une chaîne. placé dans Dans la variable de pointeur de caractère (qui est la première adresse de la chaîne)

4.2 Méthode d'affectation :

Vous ne pouvez attribuer des valeurs qu'à chaque élément du tableau de caractères. ne peut pas attribuer de valeurs au tableau de caractères en utilisant les méthodes suivantes

 char str[14];

     str="I love China";    (Mais il peut être utilisé lors de l'initialisation du tableau de caractères, c'est-à-dire char str[14 ]="J'aime la Chine";)

Pour les variables de pointeur de caractère, utilisez Les méthodes suivantes sont utilisées pour attribuer des valeurs :

 char* a;

     a="I love China";

ou char* a="I love China";  soit

4.3. Attribuer une valeur initiale à la variable de pointeur de caractère (Initialisation) :

 char* a="I love China";   

est équivalent à :

char* a;

    a="I love China";

pour les caractères L'initialisation du tableau

char str[14]="I love China";

ne peut pas être équivalente à :

 char str[14];

     str="I love China"; (Ce n'est pas une initialisation, mais une affectation, et il est faux d'attribuer des valeurs à un tableau de cette manière)

4.4. un tableau de caractères est défini, alors il a une certaine adresse mémoire ; mais lorsqu'une variable de pointeur de caractère est définie, elle ne pointe pas vers une certaine donnée de caractère et peut être attribuée plusieurs fois.

5. Fonction de traitement de chaîne

5.1

char *strcat(char *str1,const char *2 );

char *strcat(char *strDestination,const char *strSource );

fonction : La fonction connecte la chaîne str2 à la fin de str1 et renvoie le pointeur str1

Remarque : Il y a un ' après les deux premières chaînes connectées

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal