内容正文:
第7章 数组
本章内容
7.1概述
7.2一维数组
7.3 二维数组
7.4 字符数组与字符串
7.5 数组作为函数参数
7.6 综合案例
7.4 字符数组与字符串
7.4.1 字符数组的定义与初始化
7.4.2 字符串的概念及存储
7.4.3字符数组的输入输出
7.4.4字符串处理函数
7.4.5字符数组应用
7.4.1 字符数组的定义与初始化
一维字符数组定义的一般形式为:
存储类型说明符 char 数组名[下标]
二维字符数组定义的一般形式为:
存储类型说明符 char 数组名[下标][下标]
例如:
static char c[10]; /*一维字符数组*/
char s[5][10]; /*二维字符数组*/
字符数组的初始化
char c[10]={'W','e','l','c','o','m','e'};
当对全体元素赋初值时也可以省去长度说明
例如: static char c[]={'W','e','l','c','o','m','e'};
对于二维字符数组的初始化也和数值数组相同
例如:char a[][12]={{'V','i','s','u','a',’l’,’ ‘,’b’,’a’,’s’,’i’,’c’},{'V','i','s','u','a',’l’,’ ‘,’C’,’+’,’+’ }};
7.4.2 字符串的概念及存储
一个字符串存入一个数组时,结束符‘\0’也同时存入数组,并以此作为该字符串的结束标志
例如:
char c[]={‘W’,‘e’,‘l’, ‘c’,‘o’,‘m’,‘e’}; 长度为7
可写为:
char c[]={“Welcome”}; 长度为8
或去掉{}写为:
char c[]=“Welcome”; 长度为8
程序举例
【例7.8】用户输入一个姓名,例如:Tom,输出”Welcome,Tom”
main()
{
char name[10];
printf("
Please input your name:");
scanf(“%s”,name);
printf(“
welcome,%s
”,name);
}
7.4.3字符数组的输入输出
字符数组的输入
scanf函数
例如:char s[7];scanf(“%s”,s);
注意:在字符数组输入时,数组名已经是数组的首地址,因此不需要再加求地址符 &
遇到空格或回车结束字符串的输入
gets函数
函数的一般形式为:
gets(字符数组名);
例如:char s[15];gets(s);
输入时,遇到回车键结束字符串输入
字符数组的输出
printf函数
%s格式字符串,可以直接输出一个字符数组的内容
例如:char s[]=”how are you!”;printf(“%s”,s);
puts函数
例如:
puts(“hello how are you”);
char s[]=”how are you”;
puts(s);
puts函数输出时,自动将字符串的结束符转变为’
’字符
7.4.4字符串处理函数
strlen函数
函数的一般形式为:
strlen(<字符数组>)
功能:测试字符串长度
在使用strlen函数求一个字符串长度时,返回的是字符串的实际长度,不包括字符串结束标志符’\0’
例如:
char s[10]=”welcome”;
int n;
n= strlen(s)
printf(“%d”,n);
程序的输出结果不是10,也不是8,而是7。
strcpy函数
函数的一般形式为:
strcpy(<目标字符数组>,<字符串>)
功能:把一个字符串的字符拷贝到另一个字符数组
注意以下几点:
<目标字符数组>的长度必须定义的足够大,以便容纳被复制的字符串。
复制字符串时,字符串后面的’\0’被一起复制到<目标字符数组>中。
在C语言中,不允许将一个字符串或字符数组的内容直接通过赋值语句赋给另外一个数组,只能通过strcpy函数来实现,
char t[20],s[20]=”how are you”;
t=s; /*不能将一个数组的内容直接赋值给另一个数组*/
t=”hello”; /*不能将一个字符串常量赋值给一个字符数组*/
strcat函数
函数的一般形式为:
strcat(<字符数组1>,<字符串2>)
功能:把一个字符串中的字符连接到一个字符数组原有字符的后面
注意以下几点:
<字符数组1>必须定义的足够大,以便容纳连接后的新字符串。
在字符串连接时,系统会自动删除<字符数组1>后面的结束标志符’\0’,
例如:
char s[20]=”How”;
char t[20]=” do you do?”;
char r[20]=”Welcome