文章目录
一、使用字符串处理函数
1.输出字符串的函数
puts(字符数组)
作用:将一个字符串(以′\0′结束的字符序列)输出到终端。
用puts函数输出的字符串中可以包含转义字符。
在用puts输出时将字符串结束标志′\0′转换成′\n′,即输出完字符串后换行。
#include <stdio.h>
int main()
{
char str[]={"China\nBeijing"};
puts(str);
return 0;
}
2.输入字符串的函数
gets(字符数组)
作用:从终端输入一个字符串到字符数组,并且得到一个函数值。该函数值是字符数组的起始地址。
gets(str); //str是已定义的字符数组
如果从键盘输入:
Computer↙
将输入的字符串″Computer″送给字符数组str(请注意,送给数组的共有9个字符,而不是8个字符),返回的函数值是字符数组str的第一个元素的地址。
3.字符串连接函数
strcat(字符数组1, 字符数组2)
作用:把两个字符数组中的字符串连接起来,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值——字符数组1的地址。
字符数组1必须足够大,以便容纳连接后的新字符串。
连接前两个字符串的后面都有′\0′,连接时将字符串1后面的′\0′取消,只在新串最后保留′\0′。
char str1[30]={"People′s Republic of "};
char str2[]={"China"};
printf("%s", strcat(str1, str2));
4.字符串复制函数
strcpy(字符数组1, 字符串2)
作用:将字符串2复制到字符数组1中去。
字符数组1必须定义得足够大,以便容纳被复制的字符串2。字符数组1的长度不应小于字符串2的长度。
“字符数组1”必须写成数组名形式,“字符串2”可以是字符数组名,也可以是一个字符串常量。
若在复制前未对字符数组1初始化或赋值,则其各字节中的内容无法预知,复制时将字符串2和其后的′\0′一起复制到字符数组1中,取代字符数组1中前面的字符,未被取代的字符保持原有内容。
不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。字符数组名是一个地址常量,它不能改变值,正如数值型数组名不能被赋值一样。
可以用strcpy函数将字符串2中前面n个字符复制到字符数组1中去。
将str2中最前面2个字符复制到str1中,取代str1中原有的最前面2个字符。但复制的字符个数n不应多于str1中原有的字符(不包括′\0′)。
char str1[10], str2[]="China";
strcpy(str1, str2); 或 strcpy(str1, "China");
5.字符串比较函数
strcmp(字符串1, 字符串2)
作用:比较字符串1和字符串2。
字符串比较的规则是: 将两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到′\0′为止。
(1) 如全部字符相同,则认为两个字符串相等;
(2) 若出现不相同的字符,则以第1对不相同的字符的比较结果为准。
比较的结果由函数值带回。
(1) 如果字符串1与字符串2相同,则函数值为0。
(2) 如果字符串1>字符串2,则函数值为一个正整数。
(3) 如果字符串1<字符串2,则函数值为一个负整数。
strcmp(str1, str2);
strcmp("China", "Korea");
strcmp(str1, "Beijing");
5.测字符串长度的函数
strlen(字符数组)
作用:测试字符串长度的函数。函数的值为字符串中的实际长度(不包括′\0′在内)。
#include <stdio.h>
#include <string.h>
int main()
{
char str[10]="China";
printf("%d,%d\n",strlen(str),strlen("China"));
}
6.转换为大小写的函数
strlwr(字符串)
作用:将字符串中大写字母换成小写字母。
strupr(字符串)
作用:将字符串中小写字母换成大写字母。
二、字符数组应用举例
1.有3个字符串,要求找出其中“最大”者。
#include<stdio.h>
#include<string.h>
int main()
{
char str[3][20]; //定义二维字符数组
char string[20];
//定义一维字符数组,作为交换字符串时的临时字符数组
int i;
for(i=0;i<3;i++)
gets(str[i]); //读入3个字符串,分别给str[0],str[1],str[2]
if(strcmp(str[0],str[1])>0) //若str[0]大于str[1]
strcpy(string,str[0]); //把str[0]的字符串赋给字符数组string
else //若str[0]小于等于str[1]
strcpy(string,str[1]); //把str[1]的字符串赋给字符数组string
if(strcmp(str[2],string)>0) //若str[2]大于string
strcpy(string,str[2]); //把str[2]的字符串赋给字符数组string
printf("\nthe largest string is:\n%s\n",string); //输出string
return 0;
}
(1) 流程图和程序注释中的“大于”是指两个字符串的比较中的“大于”。
(2) str[0],str[1],str[2]和string是一维字符数组,其中可以存放一个字符串。
(3) strcpy函数在将str[0],str[1]或str[2]复制到string时,最后都有一个′\0′。因此,最后用%s格式输出string时,遇到string中第一个′\0′即结束输出,并不是把string中的全部字符输出。