1.字符数组的定义
字符说明符 数组名[常量表达式]
示例
char c[10]
字符数组也可以是二维或者多维数组
char c[5][10]
2.字符数组的初始化
字符数组允许在定义时做初始化赋值
char c[10]={'a','b','c','d','e','f','g','h','i','j'};
赋值后各元素的值如下:
c[0] 'a'
c[1] 'b'
c[2] 'c'
c[3] 'd'
c[4] 'e'
c[5] 'f'
c[6] 'g'
c[7] 'h'
c[8] 'i'
c[9] 'j'
示例2:
char c[3][3]={'a','b','c','d','e','f','g','h','i'};
赋值后各元素的值如下:
c[0][0]:a c[0][1]:b c[0][2]:c
c[1][0]:d c[1][1]:e c[1][2]:f
c[2][0]:g c[2][1]:h c[2][2]:i
示例3:
char c[4][3]={'a','b','c','d','e','f','g','h','i','j','k'};
赋值后各元素的值如下:
c[0][0]:a c[0][1]:b c[0][2]:c
c[1][0]:d c[1][1]:e c[1][2]:f
c[2][0]:g c[2][1]:h c[2][2]:i
c[3][0]:j c[3][1]:k c[3][2]:
由定义时可知,c[4] [3]为4行3列的二维数组,存储12个单位的字符。初始化赋值时,给出11个值,即最后一个未给出,系统自动赋值为空。
示例4:
当对全体元素赋初值时也可以省去长度说明
char c[]={'a','b','c','d','e','f','g','h','i'};
这时数组c的长度自动定为9.
3.字符数组元素的引用
输出一维数组的值
#include<stdio.h>
int main()
{
int i;
char c[9]={'a','b','c','d','e','f','g','h','i'};
for(i=0;i<=8;i++)
{
printf("c[%d]:%c\t",i,c[i]);
}
printf("\n");
}
结果如下:
c[0]:a c[1]:b c[2]:c c[3]:d c[4]:e c[5]:f c[6]:g c[7]:h c[8]:i
输出二维数组的值
#include<stdio.h>
int main()
{
int i,j;
char c[3][3]={'a','b','c','d','e','f','g','h','i'};
for(i=0;i<=2;i++)
{
for(j=0;j<=2;j++)
{
printf("c[%d][%d]:%c\t",i,j,c[i][j]);
}
}
}
结果如下:
c[0][0]:a c[0][1]:b c[0][2]:c
c[1][0]:d c[1][1]:e c[1][2]:f
c[2][0]:g c[2][1]:h c[2][2]:i
动态输入
#include<stdio.h>
int main()
{
int i;
char c[10];
for(i=0;i<=9;i++)
{
scanf("%c",&c[i]);
}
for(i=0;i<=9;i++)
{
printf("c[%d]:%c\t",i,c[i]);
}
printf("数组c的长度为:%d",sizeof(c));
}
运行结果:
abcdefghij
c[0]:a c[1]:b c[2]:c c[3]:d c[4]:e c[5]:f c[6]:g c[7]:h c[8]:i c[9]:j 数组c的长度为:10
需要注意的是,此处不能使用回车进行换行以输入下一个,因为系统会认为回车键同样是输入的字符
例如:
a
b
c
d
e
c[0]:a c[1]:
c[2]:b c[3]:
c[4]:c c[5]:
c[6]:d c[7]:
c[8]:e c[9]:
数组c的长度为:10
4.字符串数组和字符串结束标志
字符串总是以'\0'作为串的结束符,当把一个字符串存入一个数组时,也把结束符'\0'存入数组,并以此作为该字符串是否结束的标志。
c语言允许用字符串的方式对数组做初始化赋值。
char c[]={'a','b','c','d','e','f','g','h','i'};
可写成:
char c[]={"abcdefghi"};
对数组c中的元素输出并求数组长度:
#include<stdio.h>
int main()
{
int i;
char c[]={"abcdefghi"};
for(i=0;i<=9;i++)
{
printf("c[%d]:%c\t",i,c[i]);
}
printf("数组c的长度为:%d",sizeof(c));
}
或将{}去掉写成:
char c[]="abcdefghi";
对数组c中的元素输出并求数组长度:
#include<stdio.h>
int main()
{
int i;
char c[]="abcdefghi";
for(i=0;i<=9;i++)
{
printf("c[%d]:%c\t",i,c[i]);
}
printf("数组c的长度为:%d",sizeof(c));
}
5.字符数组的输入/输出
利用printf()函数进行输出,利用scanf()函数进行输入
输出可以写成:
printf("%s",c);
输入函数 需要写成:
scanf("%s",c);
注意:需要格外注意的是,以往的scanf都需要使用&符号,将从键盘上输入的数据存储到变量或者数组中,但是输入字符串变量时,要注意不能使用&符号。
#include<stdio.h>
int main()
{
int i;
char c[10];
scanf("%s",c);
for(i=0;i<=9;i++)
{
printf("c[%d]:%c\t",i,c[i]);
}
printf("数组c的长度为:%d",sizeof(c));
}
运行结果如下:
abcdefghij
c[0]:a c[1]:b c[2]:c c[3]:d c[4]:e c[5]:f c[6]:g c[7]:h c[8]:i c[9]:j 数组c的长度为:10
上述代码中可见是通过循环的形式将数组c[10]中的每个字符进行单独输出,若将单个字符以字符串的形式输出,则可得到如下结果:
#include<stdio.h>
int main()
{
int i;
char c[10];
scanf("%s",c);//使用scanf进行数据的写入
printf("%s",c); //使用printf对数组c进行输出
printf("\n");//换行
printf("数组c的长度为:%d",sizeof(c));//查看数组c的数据长度
}
运行结果如下:
abcdefghij
abcdefghij
数组c的长度为:10
注意:scanf函数输入字符串时,字符串中不能包含有空格,否则将以空格作为串的结束符
示例:
#include<stdio.h>
int main()
{
int i;
char c[10];
scanf("%s",c);//使用scanf进行数据的写入
printf("%s",c); //使用printf对数组c进行输出
printf("\n");//换行
printf("数组c的长度为:%d",sizeof(c));//查看数组c的数据长度
}
运行结果如下:
ab cdef hij
ab
数组c的长度为:10
由运行结果可知,输入的字符为ab cdef hij,中间包含有两个空格,使用printf函数将数组c进行输出后,得到的结果为ab,即将第一个空格作为了结束符,数组c中仅存储了ab。
若需要输入的字符串中包含空格时,需要定义多个字符数组,如要保存abc xyz +-*,则需要定义三个数组。
char s1[3],s2[3],s3[3];
scanf("%s %s %s",s1,s2,s3);
printf("s1的值为:%s\ns2的值为%s\ns3的值为%s",s1,s2,s3);
运行结果如下:
输入你的数据:abc xyz +-*
s1的值为:abc
s2的值为xyz
s3的值为+-*
6.字符串处理函数
若在后续的代码运行过程中,报如下错误
[Warning] incompatible implicit declaration of built-in function 'strcpy'
则是因为缺少头文件的问题,将下列代码添加到代码开始,即可解决warning的问题。
#include<string.h>
1.字符串输出函数puts
格式:puts(字符数组名)
功能:把字符数组中的字符输出到显示屏,即在屏幕上显示该字符串。
char c[]="abcdefghi";
puts(c);
运行结果如下:
abcdefghi
关于puts函数会将数组输出后换行的问题,可以考虑使用fputs(数组名,stdout)的格式进行输出
#include<stdio.h>
int main()
{
char s1[5]="abc";
fputs(s1,stdout);
}
2.字符串输入函数gets
格式:gets(字符数组名)
功能:从键盘上输入一个字符串
#include<stdio.h>
int main()
{
char c[10];
printf("输入你的字符串:");
gets(c);
printf("字符串c的值为:");
puts(c);
}
运行结果:
输入你的字符串:abc
字符串c的值为:abc
3.字符串连接函数strcat
格式:stract(字符数组名1,字符数组名2)
功能:把字符数组2中的字符串连接到字符数组1中字符串的后面,并删去字符串1后的字符串结束标记'\0'.
#include<stdio.h>
int main()
{
char c1[10]="abc",c2[3];
printf("输入c2字符串的值:");
gets(c2);
strcat(c1,c2);
printf("字符串c1的值为:");
puts(c1);
}
运行结果如下:
输入c2字符串的值:xyz
字符串c1的值为:abcxyz
注意:字符串1应具有足够长度,保证字符串2能被完整的装入,否则将造成数据缺失。
4.字符串复制函数strcpy
格式:strcpy(字符数组1,字符数组2)
功能:把字符数组2中的字符串复制到字符数组1中。串结束标志'\0'也一同被复制。
char s1="abc",s2="xyz";
strcpy(s1,s2);
puts(s1);
运行结果:
xyz
5.字符串比较函数
格式:strcmp(字符数组名1,字符数组名2)
功能:按照ASCII码顺序比较两个数组中的字符串,并由函数返回值比较结果
规则:字符串1=字符串2 返回值为0
字符串1>字符串2 返回为>0
字符串1<字符串2 返回为<0
#include<stdio.h>
int main()
{
char s1[5]="abc",s2[5]="ba",s3[5]="ca",s4[5]="d",s5[5]="abw";
int result;
result=strcmp(s1,s2);
printf("%d\n",result);
result=strcmp(s4,s3);
printf("%d\n",result);
result=strcmp(s1,s5);
printf("%d",result);
}
运行结果:
-1
1
-1
6.测字符串长度函数
格式:strlen(字符数组名)
功能:测字符串的实际长度(不含字符串结束标志'\0')并作为函数返回值返回
#include<stdio.h>
int main()
{
char s1[5]="abc",s2[5]="xyz2";
int len;
len=strlen(s1);
printf("数组s1的实际长度为:%d\n",len);
len=strlen(s2);
printf("数组s2的实际长度为:%d",len);
}
运行结果如下:
数组s1的实际长度为:3
数组s2的实际长度为:4