6.3.3 字符串函数
在C语言程序中,字符型数组主要是用来处理字符串,很少被作为纯粹的数组来使用。C语言编译系统提供了丰富的字符串处理函数,使用C系统提供的标准函数,应将其相应的头文件包含进来。下面介绍几种常用的字符串处理函数。
1.gets()函数
格式:gets(ch)
功能:从终端输入一个字符串到字符数组ch中,输入回车键时结束,并将回车符'\n'转换成'\0',其中ch只能是一个字符数组名。
说明:
①gets()读取的字符串,其长度没有限制,编程者要保证字符数组有足够大的空间存放输入的字符串。
②该函数输入的字符串中允许包含空格。
例如:
从键盘输入:How are you?
该字符串在内存中的存放形式如图6-5所示。
图6-5
2.puts()函数
格式:puts(ch)
功能:向终端输出字符串,并将'\0'转换成'\n'输出,其中ch可以是某个字符数组名,也可以是一个字符串常量。
例如:
说明:
①字符串中允许包含转义字符,输出时产生一个控制操作。
②该函数一次只能输出一个字符串。
若用puts函数写成:
上述写法是错误的,应改为:
3.strcpy()函数
格式:strcpy(ch1,ch2)
功能:将字符串ch2复制到字符数组ch1中,其中ch1为字符数组名,ch2可以是字符串常量或字符数组名。
说明:
①ch1的长度必须足够大,以便容纳被复制的字符串。一般情况下,ch1的长度不应小于ch2的长度。
②复制时连同ch2中字符串后的'\0'一起复制到ch1中。
③不能直接用赋值语句将一个字符串常量或字符数组赋给一个字符数组。
例如:
上面都是错误的,应该用strcpy函数进行处理。
④可以将字符串2前面的n个字符复制到字符数组1中。
例如:
上述语句的作用是将str2中的前2个字符复制到str1中,取代str1中最前面2个字符,然后再加上一个'\0'。
例如:
复制前后的情况如图6-6所示。
图6-6
例如:
程序运行结果如下:
复制前后的情况如图6-7所示。
图6-7
可以看出:strcpy函数只是将str1数组中前6个字符用“china\0”覆盖,在执行输出语句printf("%s",str1)时,依次输出字符'c'、'h'、'i'、'n'、'a',当碰到'a'后面的'\0'时,输出停止。
4.strcmp()函数
格式:strcmp(ch1,ch2)
功能:对字符串ch1和字符串ch2中相对应的字符从左到右一一进行比较(比较字符的ASCII码值的大小),第一个不相等的字符的大小决定了整个字符串的大小,若ch1和ch2的所有字符完全相同,则ch1等于ch2。ch1和ch2为字符串名或字符串常量。
比较结果由函数值带回。
①如果ch1等于ch2,则函数返回0。
②如果ch1大于ch2,则函数返回一个正整数。
③如果ch1小于ch2,则函数返回一个负整数。
说明:
①两串比较大小取决于第一个不相同的字符,而不是字符串的长度。
②比较两个字符串不能直接用关系运算符,只能用strcmp()函数。
例如:
if(str1= =str2) printf("yes");这种写法是错误的。
if(strcmp(str1,str2)= =0) printf("yes");这种写法是正确的。
5.strcat()函数
格式:strcat(ch1,ch2)
功能:将字符串ch2连接到字符串ch1的后面。连接时先将ch1的'\0'去掉,连接后在新字符串后补上'\0'。要求ch1必须是一个足够大的字符数组,ch2可以是字符串常量或字符数组名。
例如:
连接前后的情况如图6-8所示。
图6-8
6.strlen()函数
格式:strlen(ch)
功能:返回字符串ch的有效字符的个数,即字符串长度,不包括'\0',其中ch为字符数组名或某个字符串常量。
7.strlwr()函数
格式:strlwr(ch)
功能:将字符串ch中的所有的大写字母转换成小写字母。
8.strupr()函数
格式:strupr(ch)
功能:将字符串ch中的所有的小写字母转换成大写字母。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。