null第11章 字符数组第11章 字符数组用来存放字符数据的数组是字符数组,常用来处理字符串。字符数组其实就是类型为char的数组。同其他的数组类型一样,字符数组既可以是一维的,也可以是二维,甚至多维的。本章内容如下:
字符数组的定义;
字符数组的初始化;
字符数组的引用;
字符数组与字符串的关系;
字符数组的输入与输出;
字符串处理函数;
应用举例。11.1 字符数组的定义11.1 字符数组的定义一维字符数组的定义方式如下:
char 数组名[常量
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
达式];
例如:char c[5];
二维数组的定义方式如下:
char 数组名[常量表达式][常量表达式];
例如:char c[5][5];
在字符数组中,我们只能每个元素存放一个字符数据。例如:
char c[5];
c[2]='a';
字符型和整型是相互通用的,所以,可以定义一个整型数组来存放字符型数据。例如:
int c[5];
c[2]='a';11.2 字符数组的初始化11.2 字符数组的初始化字符数组的初始化,即对字符数组中的每个元素赋值。例如:
char c[10]={'I',' ','a','m',' ','h','a','p','p','y'};
把这10个字符数组元素分别赋值为:c[0]='I',c[1]=' ',c[2]='a',c[3]='m',c[4]=' ',c[5]='h',c[6]='a',c[7]='p',c[8]='p',c[9]='y'。11.3 字符数组的引用11.3 字符数组的引用通过引用字符数组中的元素,进行程序设计跟前面所讲的数组引用相似。
【例11-1】输入一个由5个字符组成的单词,将其内容颠倒过来,并输出。11.4 字符数组与字符串的关系11.4 字符数组与字符串的关系在C语言中,字符串使用双引号括起来的字符序列。C语言中,是将字符串用字符数组来处理的。
【例11-2】编写一程序,用于合并两个已知的字符数组。nullC语言允许用一个简单的字符串常量初始化一个字符数组,而不必使用一串单个字符。例如:
char str[ ]={"good"};
可以省略{ },直接用双引号。
g o o d \0
字符数组在编译时,自动在字符串的末尾加上了一个特殊字符‘\0 ’。所以,字符数组的个数是5。
char str1[ ]={"good"};
char str2[ ]={'g','o','o','d'};11.5 字符数组的输入与输出11.5 字符数组的输入与输出由于字符串放在字符数组中,所以,对字符串的输出也就是对字符数组的输出。字符数组的输出有两种形式:
(1)当字符数组中存储的字符不是以‘\0’结束时,只能像普通的数组那样,用格式符"%c"一个元素一元素的处理。
(2)当用字符数组处理字符串时,可以与“%s”格式字符配合,完成字符串的输入输出。null注意:
(1)在使用scanf函数输入字符串时,“地址”部分应该直接写字符数组的名字,而不是取地址运算符&。因为在C语言中,数组的名字代表该数组的起始地址。
(2)在输出字符串时,输出项也为数组名,不能使数组元素。
利用格式符"%s"输入的字符串,以“空格”,“TAB”间隔多个字符串,“回车”结束输入。
(3)当字符数组长度大于字符串的实际长度时,也只输出到'\0‘时结束。例如:
char str[20]="world";
printf("%s",str);
(4)如果字符数组中包含多个‘\0’,遇到第一个'\0'时,输出结束。例如:
char str[20]="hello\0world";
printf("%s",str);
(5)用scanf函数“%s”格式输入一个字符串时,函数中输入项用数组名,并且该数组已定义,而且输入字符串的长度应小于数组长度。
例如:
char str[10];
scanf("%s",str);11.6 字符串处理函数11.6 字符串处理函数C语言中有很多字符串处理的库函数,这些库函数为字符串处理提供了方便。在使用时,要在程序开头将这些字符串库文件包含到程序中。即:#include
。11.6.1 输入字符串函数gets11.6.1 输入字符串函数getsgets函数用于输入一个字符串,其调用形式如下:
gets(字符数组);
将一个字符串存放到字符数组中,并且得到一个函数值。即,gets函数的返回值是存放输入字符串的字符数组的起始地址。例如:
char str[ 20];
gets(str);
其中,str是字符数组,输入的字符串存放在字符数组str中。11.6.2 输出字符串函数puts11.6.2 输出字符串函数putsputs函数用于输出一个以'\0 '结尾的字符串,其调用形式如下:
puts(字符数组);
例如:
char str[]="world";
puts (str);
puts函数输出的字符串可以包含转义字符。
char str[]="hello\nworld";
puts (str);
输出结果为:
hello
world11.6.3 字符串测长度函数strlen11.6.3 字符串测长度函数strlenstrlen函数用于测试字符串的长度。函数值为实际的字符串的长度,不包括'\0 '所占的位置。其调用形式如下:
strlen(字符数组);
例如:
char str[10]={"hello"};
printf("%d",strlen(str));
输出结果为:5。strlen测试的是实际的字符串的长度,所以结果既不是6,更不是10。
strlen函数还可以直接测试字符串常量的长度,例如:
strlen("hello");11.6.4 字符串比较函数strcmp11.6.4 字符串比较函数strcmp在C语言中,不允许用下列形式比较字符串。
if(str1==str2)
{
printf("相等");
}
字符串比较不能用关系运算符。只能用strcmp函数,比较结果由strcmp函数返回。其调用形式如下:
strcmp(字符串1,字符串2)
11.6.4 字符串比较函数strcmp11.6.4 字符串比较函数strcmp完成“字符串1”与“字符串2”的关系比较,即对两个字符串自左至右逐个字符按其ASCII码值相比,直到出现不同的字符或遇到'\0'为止。比较的结果由函数值获得:
char str1[20],str2[20];
int n;
n=strcmp(str1,str2);
如果"字符串1"="字符串2",函数值n为0;
如果"字符串1">"字符串2",函数值n为一正数;
如果"字符串1"<"字符串2",函数值n为一负数。
11.6.5 字符串复制函数strcpy和strncpy11.6.5 字符串复制函数strcpy和strncpyC语言中,不允许用赋值语句直接将一个字符串赋给另一个字符数组。即:
str1="hello";
str2=str1;
字符串复制必须使用strcpy函数。字符串复制函数,是将字符串一个字符一个字符的复制,直到遇到'\0 '字符为止。其中,对'\0 '字符也一起复制。其调用形式如下:
strcpy(字符数组1,字符数组2)
在将字符数组2复制到字符数组1中时,字符数组1的空间必须足够大。11.6.5 字符串复制函数strcpy和strncpy11.6.5 字符串复制函数strcpy和strncpy注意:
字符数组1必须是字符数组名的形式。
字符串2可以是字符数组名或字符串常量。
strncpy函数是将字符串2中前n个字符复制到字符数组1中。
如果需要复制字符串2中前面的若干个字符,则可指出需要复制的字符数。其调用形式如下:
strncpy(字符数组1,字符串2,字符数)
strncpy(str1, str2, 2) ;
把str2中头上二个字符复制到str1中去,str1再加一个结束‘\0’。11.6.6 字符串连接函数strcat11.6.6 字符串连接函数strcatstrcat函数用于连接两个以'\0 '结尾的字符串,其调用形式如下:
strcat(字符数组1,字符数组2)
例如:
char str1[20]="how ";
char str2[20]="are you?";
strcat(str1,str2);
运行后,输出:how are you?11.7 应用举例11.7 应用举例【例11-4】将一个字符串复制到另一个字符串中,即完成strcpy函数的功能。
【例11-5】编写程序实现输出一个字符串后,将字符串的内容颠倒过来。