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中还有其他一些字符串操作函数,用户可以根据需要查阅使用,这里就不再一一介绍了。