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

本文介绍了C语言中字符串的定义与初始化方法,详细讲解了字符串的输入输出操作,并探讨了多种字符串处理函数,如字符串复制、连接及比较等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
的输出结果为:

abc
def

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.h
strstrstrstr(字符串1,字符串2)找出字符串2在字符串1中第一次出现的位置string.h
atofatof(字符串1)将字符串1转化为实型数值stdlib.h
atoiatoi(字符串1)将字符串1转换为整型数值stdlib.h
itoaitoa(指1,字符数值2,进制n)将值1按进制n转化为字符串,存储到字符数组2中stdlib.h


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值