C语言中字符串的相关处理

来源:互联网 发布:微信域名备案 编辑:程序博客网 时间:2024/06/06 02:20

C语言中,没有提供专门的字符串类型,所以需要字符数组来处理字符串。

1. 定义并初始化字符数组有两种方式:

1)用字符为字符数组赋值

char word1[4]={'t','r','e','e'};

定义了一个长度为4的字符串word1。

2)用字符串常量为字符数组赋初值

char word2[5]="tree";

定义了一个长为5的字符串word2。

注意:由于word1与word2的赋值方式不同,它们的大小不同。这是由于C语言会自动在字符串的结尾添加一个终止符'\0',因此,word2中的字符数为4,而数组长度为5。

在用字符串初始化字符数组时,如果在定义字符数组的最大字符数比初始化的字符个数大,这在内存中自动为多余的元素赋值为'\0'。

2. 字符串的输入输出

1)使用scanf_s以及gets函数输入字符串

scanf_s("%s",word);
gets(word);

从键盘输入一个字符串,存储到字符数组word中,该字符串由换行符以前的所有字符组成。

scanf_s与gets的区别:

scanf_s读取的字符串中是不包含空白字符的,因为它会忽略开始的空白字符,以后当再次读到空白字符时,就会结束读取。而gets函数所读取的字符串可以包含空格。在使用时,要根据程序的功能进行合适的选择。

比如:

char word[10];scanf_s("%s",word);

如果在键盘上输入abcd def,则word的指为“abcd”。而

char word[10];gets(word);

如果在键盘上输入abcd def,则word的指为“abcd def”。

2)使用printf函数与puts函数输出字符串

printf("%s",word);
将字符数组word以字符串的形式输出。输出时,第一次遇到结束标记‘\0’就停止输出,而不管其后还有没有别的字符。

另外,也可以使用puts函数来输出一个字符串,其格式为:

puts(数组名);

puts输出时将字符串介数标记'\0'转换成'\n',即输出完字符串后换行,如:

char word[]="abc",word1[]="def";puts(word);puts(word1);
的输出结果为:

abcdef

3.与字符串处理有关的几个函数

以下几个函数都包含在头文件string.h中。
1)字符串长度测量函数strlen
char word[10]="abcd";printf("%d",strlen(word));
输出的结果是字符串的实际长度4.

2)字符串复制函数strcpy
strcpy(字符数组名1,字符串2);
这个函数将字符串2的所有字符一个一个地复制到字符数组1中,直到遇到结束标志'\0'为止,并把结束标志也写入到字符数组1中。
char word1[]="sichuan";char word2[]="chengdu";strcpy(word1,word2);

不能使用“word1=word2;”来代替,因为这句话试图用word2的地址去修改word1的数组地址,而字符数组的地址是不能在程序中修改的。
另外,一定要保证数组1的长度大于数组2的长度,否则会发生越界错误。

此外,C语言还提供了函数strncpy,用于将字符串2的前几个字符复制到数组1中:
strncpy(字符数组1,字符串2,要复制的字符数);
3)字符串连接函数strcat
strcat(字符数组名1,字符串2);
取消第一个字符串中的结束标记,把第二个字符串拼接到第一个字符串的后面,并把拼接后的字符串存放到字符数组1中。要求第一个字符数组必须足够大。
4)字符串比较函数strcmp

strcmp(字符串1,字符串2);
将两个字符串按照字典排序的方式进行比较,即从字符串1和字符串2的第一个字符开始从左至右依次按ASCII码进行比较,直到出现不相同的字符或碰到结束标志'\0'为止。函数的返回值是一个整数:

i)在不相同字符的ASCII码中,如果字符串1与字符串2相等,即它们的长度相等,且对应的字符也相等,则返回0;

ii)在不相同字符的ASCII码中,如果字符串1大于字符串2,则函数返回一个正整数;

iii)在不相同字符的ASCII码中,如果字符串1小于字符串2,则函数返回一个负整数;

注意:比较两个字符串是否相同,只能通过这个函数来比较,不能直接对存储他们的数组名进行比较,因为那样比较的是两个字符串地址的大小,而不是字符串的大小。例如:

char word1[]="chengdu";char word2[]="chengdz";printf("%d\n",strcmp(word1,word2));printf("%d\n",word1>word2);
以上程序输出结果为:

-1 1

前一个-1表示字符串word1的值小于word2,而后一个1表示作为字符数组地址的word1大于word2这个字符数组的地址,该关系表达式的值为真。

4.其他常用字符串处理函数

函数名一般形式功能头文件strchrstrchr(字符串1,字符2)查找字符2在字符串2中第一次出现的位置string.hstrstrstrstr(字符串1,字符串2)找出字符串2在字符串1中第一次出现的位置string.hatofatof(字符串1)将字符串1转化为实型数值stdlib.hatoiatoi(字符串1)将字符串1转换为整型数值stdlib.hitoaitoa(指1,字符数值2,进制n)将值1按进制n转化为字符串,存储到字符数组2中stdlib.h


以上为C语言中关于字符串的内容。

0 0