用来存放字符量的数组称为字符数组。
1 字符数组的定义
1. 字符数组的定义
字符数组的定义和整型数组的定义是相同的;
// 案例1:
char c[10];
// 字符数组也有二维数组;
// 案例2:
char a[3][4];
字符数组的初始化,字符数组是可以在定义的时候进行初始化的。
// 案例3:
char c[10]={'a','v','s'};
char c1[3]={'a','v','\0'};
char c2[]={"hello"};
char c3[10]="hello";
char c4[]={'a','b','c'};
char *p="hello";
2.字符数组的引用
// 案例4:
#include<stdio.h>
int main()
{
char a[][5]={
{'h','e','l','l','o'},
{'w','o','r','l','d'}
}
for(int i=0;i<1;i++)
{
for(int j=0;j<5;j++)
{
printf("%c",a[i][j]);
}
printf("\0");
}
return 0;
}
注释:二维数组在初始化时,全部元素赋初值,故一维下标的长度可以不加说明
3. 字符串和字符串的结束标志'\0'
在C语言中字符串是没有专门的变量,因此常用一个字符数组表示字符串。字符串总是以“\0”作为字符串的结束。因此,当把一个字符串存入一个数组的时候,也把结束符“\0”存入数组,并作为此字符串的结束标志。有了“\0”标志后,就不会再用字符数组的长度来判断字符串的长度了。
“\0”在C编译系统自动加上的,由于采用了“\0”标志,所以在用字符串赋初值时,一般无须指定数组的长度,而由系统自行处理。
4. 字符数组的输入输出
// 案例5:
#include<stdio.h>
int main()
{
char string[10]; //定义字符数组,若不初始化,必须说明其长度
printf("input string:");
scanf("%s",string); // 输入字符串
printf("%s\n",string); // 字符串的输出
return 0;
}
注释:
1.“%s”表示,格式字符串;
2.定义一个字符串时,若没有进行初始化,则必须说明其长度;
3.字符数组名string代表字符串的首地址。
2 字符串的处理函数
C语言中提供了一些字符串的处理函数,其中包括:输入、输出、合并、修改、比较、转换、复制和搜索八类。使用用输入输出函数,在使用前应包含头文件“stdio.h”,其他的函数应用头文件“string.h”。
1.字符串的输入输出gets、puts
格式:
gets (字符数组名);
puts (字符数组名);
功能:
1.gets从标准输入设备上输入一串字符串;
2.puts把字符数组中的字符串输出到显示器上,显示该字符串。
// 案例6:输入输入hello world;
#include<stdio.h>
int main()
{
char ch[15];
gets(ch); // 从键盘输入“hello world”
puts(ch); // 显示器显示“hello world”
return 0;
}
注释:从上面可以看出,gets函数并不以空格作为字符串输入结束的标志;而以回车作为结束标志。
2. 求字符串的长度:strlen
格式:
strlen(字符数组);
功能:计算字符串的实际长度,不包括'\0'.
// 案例7:
#include<string.h>
int main()
{
char ch1="hello world";
int k=strlen(ch1);
printf("The length of ch1 is %d\n",k);
return 0;
}
3. 复制字符串:strcpy
格式:
strcpy (字符数组1,字符数组2);
strncpy(字符数组1,字符数组2,n);
功能:
1.strcpy把字符数组2里面的字符串拷贝到字符数组1中,包括'\0';也就是把字符数组2的字符串给字符数组1。
2.strncpy字符数组1中的前n个字符,由字符数组2代替。
// 案例8:
#include<string.h>
int main()
{
char ch1[30]="hello world!";
char ch2[30]="nihao!";
strcpy(ch1,ch2);
puts(ch1)
strncpy(ch1,ch2,5);
puts(ch1);
return 0;}
4. 连接字符串:strcat
格式:
strcat(字符数组1,字符数组2)
strncat:(字符数组1,字符数组2,长度n)
功能:
1.strcat把字符数组2中的字符串链接到字符数组1的字符串后面,并删去字符数组1后面的'\0'。本函数的返回值是字符数组1的首地址。
2.strncat:拼接制定长度的字符串
// 案例9:
#include<string.h>
int main()
{
char ch1[30]="my name is ";
char ch2[30];
char ch3[10]="yuan yi";
printf("input your name:");
stract(ch1,ch2);
puts(ch1);
strnact(ch1,ch3,4);
puts(ch1);
return 0;
}
5. 字符串的比较:strcmp
格式:
strcmp(字符数组1,字符数组2);
strncmp(字符数组1,字符数组2,n);
功能:
1.strcmp按照ASCII码顺序比较两组数组中的字符串,并返回比较结果;相等输出0。
2.strncmp比较两组数组的前n个字符,相等输出0。
// 案例10:
#include<string.h>
int main()
{
int k;
char ch1[20]="hello world";
char ch2[20]="hello jack";
k=strcmp(ch1,ch2);
if(k==0)
{
printf("ch1和ch2是相同的\n");
}
else
{
printf("ch1和ch2是不相同的\n");
}
k=strncmp(ch1,ch2,3);
if(k==0)
{
printf("ch1和ch2是相同的\n");
}
else
{
printf("ch1和ch2是不相同的\n");
}
return 0;
}
···
#3 字符串和指针的关系
char string[10]="hello";
char *p=string;
printf ("string=%s\n",p);
网友评论