5.1.3 一维字符串数组
用一维数组来表示字符串是程序中很常见的用法。下面就详细介绍如何定义和初始化一维字符串数组,以及如何应用C51自带的字符串操作函数来对字符串进行处理。
1.一维字符串数组定义
在C51中,字符串可以被定义为一个以空字符结束的一维字符串数组。其中空字符以“\0”来标识,一般不显示。因此在程序中定义字符串数组时,必须要定义一个比要存的字符串多一个字符的数组,其中最后多出来的一位用来存放空字符“\0”。
例如定义一个长度为20的一维字符串数组c,定义形式如下。
char c[20];
其中,由于字符串数组c[20]的最后一位用来存放空字符“\0”,所以字符串数组c[20]实际能存储的字符长度为19。
2.一维字符串数组初始化
与数组元素的初始化一样,字符串数组也可以在定义时直接初始化。例如定义一个“Hello”的一维字符串数组str,定义形式如下。
char str[6]={‘H','e','l','l','o','\0’};
或者还可以直接使用字符串常量来定义,定义形式如下。
char str[6]=“Hello”;
在这种情况下,编译程序会自动加上空字符“\0”。以上两种定义方式均可以不给出字符数组的长度。即上式可等价地写为如下形式。
char str[]={‘H','e','l','l','o','\0’};
char str[]=“Hello”;
字符串数组的数组名即是字符串的首地址,在使用时,字符串既可以按顺序输出,也可以用名字整体输出。这点与数值型数组不同,程序示例如下。
include<stdio.h>//头文件
void main()//主函数
{
char a[]=“String1”,*p=“String2”;//定义字符串数组a和指针p
printf(“%s,%s\n”,a,p);//整体输出字符串数组a和指针p的内容
while(*p)//顺序输出,直至为空
{
printf(“%c”,p++);//输出当前p的内容
}
p=a;//重新给指针p赋值
printf(“\n%s,%s”,a,p);//整体输出字符串数组a和指针p的内容
}
该程序可以在KeilµVision3编译环境中执行。运行的结果如下。
String1,String2
String2
String1,String1
本例中,首先初始化两个字符串。由于字符串在数组中是按顺序存放的,字符串名即为其首地址,指针p输出的不是地址,而是地址中的内容data。程序中使用了字符串名来输出整个字符串的内容。
3.字符串函数
在C51中,字符串不是一种独立的数据类型。为了在程序中使用字符串,可以使用字符串常量来表示。字符串常量是用双引号括起来的一串字符,下面两个均为字符串常量。
“hello everyone!”
“this is a string”
字符串常量的末尾不需添加空字符“\0”,编译程序会自动完成这一工作。
在C51中,string.h库函数中提供了一些字符串操作函数,利用这些函数可以方便快捷地处理字符串。常用的字符串操作函数如下。
❑strlen(str1)函数。用于返回字符串str1的长度。
❑strcpy(str1,str2)函数。用于将字符串str2的内容复制到字符串str1。
❑strcat(str1,str2)函数。用于将字符串str2连接到字符串str1的末尾。
❑strcmp(str1,str2)函数。用于比较字符串str1和str2。若str1=str2,则返回值为0;若str1<str2,则返回值小于0;若str1>str2,则返回值大于0。
这里以strcat函数和strcpy函数为例,介绍字符串操作函数的用法,程序示例如下。
include<stdio.h>//头文件
include<string.h>//提供字符串操作的头文件
void main()//主函数
{
char a[10]={‘v','e','r','y','\0’};//声明字符串数组,并初始化
char b[]=“good”;
char s[15];
printf(“字符串a的长度为%d\n”,strlen(a));//输出字符串a的长度
printf(“字符串b的长度为%d\n”,strlen(b));//输出字符串b的长度
strcat(a,b);//将字符串b连接到a的末尾
printf(“a=%s,b=%s\n”,a,b);//输出
strcpy(s,a);//将字符串a复制到字符串s
printf(“s=%s\n”,s);//输出字符串s
}
该程序可以在KeilµVision3编译环境中执行,运行的结果如下。
字符串a的长度为5
字符串b的长度为5
a=verygood,b=good
s=verygood
本例中,先定义了字符串数组a、b和s,并在定义时对a和b进行初始化。然后使用strlen()函数求字符数组a和b的长度。使用strcat()函数字符串b连接到a的末尾。使用strcpy()函数,将字符数组a复制到s中,为s初始化,这样s和a的内容相同。所以声明数组s时要多声明其长度。这些字符串函数位于string.h头文件中,因此在程序开始必须加入该头文件。
说明头文件string.h中还有其他一些字符串操作函数,用户可以根据需要查阅使用,这里就不再一一介绍了。