C语言提供了丰富的字符串处理函数,大致可分为字符串的输入、输出、合并、修改、比较、转换、复制等几类,使用这些函数可大大减轻编程的负担。用于输入/输出的字符串函数,在使用前应包含头文件“stdio.h”,使用其他字符串函数则应包含头文件“string.h” 。
下面介绍几个最常用的字符串函数。
1.字符串输出函数puts ( )
字符串输出函数puts ()的一般形式为:
puts ()函数的功能是把字符数组中的字符串(以'\0'结束的字符序列)输出到显示器,即在屏幕上显示该字符串。例如:
char str[ ] = { " China" } ;
puts(str) ;
“puts( str) ;”语句的作用和“printf ( " % s" , str) ;”语句的作用相同,结果都是在终端输出字符串“China” 。 puts()函数完全可以由printf ()函数取代,当需要按一定格式输出时,通常使用printf()函数。
用puts ()函数输出的字符串中可以包含转义字符。例如:
char str[ ] = { " China\nBeijing" } ;
puts(str) ;
输出结果:
China
Beijing
从本例中可以看出puts ()函数中可以使用转义字符,因此输出结果成为两行。
2.字符串输入函数gets ( )
字符串输入函数gets()的一般形式为:
gets()函数的功能是从标准输入设备键盘上输入一个字符串到字符数组。函数的返回值为该字符数组的首地址。例如:
char str[ ] ;
gets(str) ;
“ gets( str) ;”语句的作用和“scanf("%s" , str) ;”语句的作用相同,结果都是在终端输入一个字符串,并将字符串赋给字符数组str。如果从键盘输入“computer”,则将其赋给字符数组。一般情况下gets ( )函数可以由scanf( )函数取代,当需要按一定格式输入时,通常使用scanf ()函数。但是当输入的字符串中含有空格,输出希望为全部字符串时,建议使用gets( )函数。因为gets()函数并不以空格作为字符串输入结束的标志,而只以回车作为输入结束。这是与scanf ()函数不同的。
例6.6 两种字符串的输入/输出函数比较。
编写程序:
创建一个名为“eg6_6.c”的新文件,在编辑窗口中输入下面的程序代码。
运行结果:
程序说明:
(1)通过字符串的输入函数gets()和输出函数puts ()完成字符串输入或输出时,每次只能输入或输出一个字符串。输入时,字符串中允许有空格,用回车表示字符串输入结束。
(2)通过采用格式输入函数scanf()和输出函数printf()完成字符串输入或输出时,采用的格式符为"% s"。使用一次输入函数scanf()可以输入多个字符串,但输入的字符串不能含有空格,输入函数以空格或回车表示字符串输入结束。
3.字符串连接函数strcat ( )
字符串连接函数strcat ()的一般形式为:
其功能是把字符数组2中的字符串连接到字符数组1中字符串的后面,并删去第一个字符串后的字符串结束标志'\0'。函数的返回值是字符数组1的首地址。使用该字符串连接函数则应包含头文件“string.h”。例如:
char str1 [ 30 ] = { "People's Republic of " } ;
char str2 [ ] = { " China" } ;
printf ( " % s" , strcat ( str1 .str2) ) ;
本例的功能是将字符数组str2中的字符串“China”连接到字符数组str1中的字符串“People's Republic of”的后面,去掉数组str1中的字符串的结束标志'\0' ,并返回str1的首地址。输出结果为:People's Republic of China。需注意字符数组1的长度应大于等于两个数组中字符串的长度之和,否则不能全部装入被连接的字符串。
4.字符串拷贝函数strcpy ( )
字符串拷贝函数strcpy ()的一般形式为:
其功能是把字符数组2中的字符串拷贝到字符数组1中。字符串结束标志'\0'也一同拷贝。使用该字符串函数则应包含头文件“string.h”。例如:
char str1 [ 10 ] , str2 [ ] = { " China" } ;
strcpy (str1 , str2) ;
puts( str1 ) ;
本例的功能是将字符数组str2中的字符串“China”拷贝到字符数组str1中,且连同字符串的结束标志'\0'一同拷贝,并返回str1的首地址。输出结果为:China。
说明:
(1)字符数组1必须定义得足够大,以便容纳被复制的字符串,即字符数组1的长度不应小于字符数组2的长度。
(2)字符数组1必须写成数组名的形式(如str1 ),字符数组2可以是字符数组名,也可以是一个字符串常量,如“strcpy( str1 , " China" ) ; ” 。
(3)复制时连同字符串后面的'\0'一起复制到字符数组1中。(www.daowen.com)
(4)可以使用strcpy ()函数将字符数组2中前面若干个字符复制到字符数组1中去。例如,“ strcpy (str1 , str2 , 2) ;”的作用是将str2中前面2个字符复制到str1中去,然后再加一个'\0'。
(5)不能用赋值语句将一个字符串常量或字符数组直接赋值给一个字符数组。例如:
str1 = "China"; 不合法。
str1 = str2; 不合法。
(6)用赋值语句只能将一个字符赋给一个字符型变量或字符数组元素。例如:
下面是合法的使用。
char a[5] ,c1 ,c2;
c1 ='A' ; c2 ='B' ;
a[0] ='C' ; a[1 ] ='h' ; a[2] ='i' ; a[3] ='n'; a[4] ='a' ;
5.字符串比较函数strcmp ( )
字符串比较函数strcmp ()的一般形式为:
其功能是按照ASCII码顺序比较两个字符串,并由函数的返回值返回比较结果。使用该字符串函数则应包含头文件“string.h”。
比较规则:
两个字符串自左至右逐个字符进行比较,直到出现不同字符或遇到'\0'为止。如果字符全部相同,则两个字符串相等;若出现不同的字符,则遇到的第一对不同字符的ASCII大者为大。
(1)如果字符串1=字符串2,则函数值为0。
(2)如果字符串1>字符串2,则函数值为一正整数。
(3)如果字符串1<字符串2,则函数值为一负整数。例如:
strcmp ( " China" , " Korea" ) ;本例将两个字符串进行比较,依次比较字符串中对应位置的字符,第一对字符不同,因为字母K的ASCII码比字母C的大,因此函数的返回值为负数,说明字符串1小于字符串2。
在字符串的比较函数strcmp ()中,“字符串1”和“字符串2”可以是字符数组名,也可以是一个字符串常量。如语句“strcmp ( str1 ," China" ) ;”和“strcmp ( str1 , str2) ;”都是合法语句。对两个字符串比较,不能采用“if(str1 > str2) printf(" yes" ) ;”而只能用“if ( strcmp ( str1 ,str2) >0) printf( "yes" );”。
例6.7 有3个字符串,要求找出其中最大者。
编写程序:
创建一个名为“eg6_7.c”的新文件,在编辑窗口中输入下面的程序代码。
运行结果:
程序说明:
本例中定义了4个字符数组来存放字符串,利用gets ( )函数输入3个字符串,利用strcmp ()函数比较字符串值,将较大者放入字符数组str中。
6.测字符串长度函数strlen ( )
测字符串长度函数strlen ()的一般形式为:
其功能是求字符串的实际长度(不含字符串结束标志'\0') ,并将求得的结果作为函数的返回值。使用该字符串函数则应包含头文件“string.h”。例如:
char str[ 10 ] = { "China" };
printf (" % d" , strlen ( str) );
本例的功能是测试字符数组str的实际长度,输出结果不是10也不是6,而是5。也可以直接测试字符串常量的长度,如“strlen( " China" ) ; ” 。
思考:strlen ()函数和sizeof()的功能是否相同?
7.大写转小写函数strlwr( )
大写转小写函数strlwr ()的一般形式为:
其功能是将字符串中的大写字母转换成小写字母。使用该字符串函数则应包含头文件“string.h”。例如:
char str[ 10 ] = { " China" };
printf (" % s" , strlwr ( str) );
本例的功能是将字符数组str中的字符串所有字母转换为小写字母。结果为:" china" 。
8.小写转大写函数strupr( )
小写转大写函数strupr ()的一般形式为:
其功能是将字符串中小写字母转换成大写字母。使用该字符串函数则应包含头文件“ string.h”。例如:
char str[ 10 ] = { "China" };
printf ( " % s" , strupt ( str) );
本例的功能是将字符数组str中的字符串所有字母转换为大写字母。结果为:" CHINA"。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。