文档介绍:第九讲数组
字符数组与字符串
应用举例
字符数组与字符串
字符数组
1. 字符数组的定义
一维数组的定义形式:
char 数组名[常量表达式];
例如:char c[10];
二维数组的定义形式:
char 数组名[常量表达式1][常量表达式2];
例如:char b[3][4];
用来存放字符数据的数组是字符数组。字符数组中的一个元素存放一个字符。
char c[10]可写成int c[10]
2. 字符数组的初始化
如:
static char c[10]={‘w’,’‘,’r’,’y’,’d’,’g’,’I’,’s’,’c’,’u’};
说明:
(1)如果花括号中提供的数值个数(即字符个数)大于数组长度,则作语法错误处理。
(2)如果初值个数小于数组长度,则只将这些字符赋给数组中的前面那些元素,其余元素自动定为空字符(‘\0’)
(3)如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。
3. 字符数组的引用
输出一个字符串
main( )
{char c[10]={‘I’,’‘,’a’,’m’,’‘,’h’,’a’,’p’,’p’,’y’};
int I;
for(i=0;i<10;i++)
printf(“%c”,c[i]);
printf(“\n”);
}
运行结果:
I am happy
输出水晶石。
main( )
{char c[5][5]={{‘‘,’‘,’* ‘},{‘‘,’*’,’‘,’*’},{‘*’,’‘,’‘,’‘,’*’}, {‘‘,’*’,’‘,’*’},
{‘‘,’‘,’*’}};
int I,j;
for(i=0;i<5;i++);
{For(j=0;j<5;j++);
printf(“%c”,c[i][j]);
printf(“\n”);
}
}
字符串
1. 字符串和字符串结束标志
(1)字符串常量。字符常量是用双引号括起来的一串字符,C语言约定用‘\0‘作为字符串的结束标志,它占内存空间,但不计入串的长度。’\0’的代码值为0。
(2)在C语言中,字符串可以存放在字符型一维数组中,故可以用字符型一维数组处理字符串。
2. 用字符串常量给数组赋初值(初始化)。
char c[6]=“chian”;
说明:
(1)如果提供的字符个数大于数组长度,系统报错;
(2)如果提供的字符个数小于数组的长度,则在最后一个字符后加‘\0‘作为字符串结束标志。
3. 通过赋初值隐含确定数给长度。
char str[ ]=“china”; 串的长度为6;系统自动在末尾加‘\0’
char str[ ]={‘c’,’h’,’I’,’n’,’a’}; 串的长度为5;
注意:
若定义的字符数组准备作为字符串使用,则要求其最后一个字符为‘\0’。
4. 字符串的输入和输出
(1)逐个字符输入输出函数。
(a)在标准输入和输出函数printf和scanf中,用格式符“%c”输入或输出一个字符。
(b)使用gets和puts函数。
(2)将整个字符串一次输入或输出。用格式符“%s“,输出字符串。例如:
static char c[ ]={“china”};
printf(“%s”,c);
注意:
(1)输出字符不包括结束符‘\0‘。
(2)用“%s“格式输出字符串时,printf函数中的输出项是数组名,而不是数组元素名。写成下面的形式是不对的:
Printf(“%s”,c[0]);
(3)如果数组长度大于字符串实际长度,也只输出到遇到‘\0‘结束。
(4)如果一个字符数组中包含一个以上’\0‘,则遇到第一个’\0’时输出就结束。
(1)puts(字符串)——字符串输出函数。
功能:将一个字符串输出到终端。输出的字符串包含转义字符。例如:
char str[ ]={“china\nbeijing”};
puts(str);
输出:
china
beijing
(2)gets(字符数组)——字符串数组输入函数
功能:从终端输入一个字符串到字符数组,该函数返回值是字符数组的起始地址。例如:
gets(str);
注意:用puts和gets函数只能输入或输出一个字符串,I不能写成:puts(str1,str2); 或 gets(str1,str2);
(3)strcat(字符串1,字符串2)——连接两个字符串函数。
功能:连接两个字符串中的字符,把字符串2接到字符串1的后面,结果放在字符串1中,函数调用后得到一个函数值——字符串1的地址。
说明:
(a)字符串1必须足够大,以便能容纳连接后的新字符串。
(b)连接的前两个字符串后面都有一个‘\0‘,连接时将字符