再上一篇:5.9 程序的多文件组织
上一篇:第六章 数组
主页
下一篇:6.3 字符串处理函数
再下一篇:第七章 结构体、共同体和枚举类型
文章列表

6.2 字符数组的定义及应用

《VC++程序设计基础》,讲述C++语言的语法和标准库,以及Visual C++ 函数库和MFC类库的使用,并附相关代码示例。

字符类型的数组也可以与前面介绍的数组一样来使用,其中每一个元素存放一个字符。为了更方便地使用字符数组,通常可把字符数组用来存放字符串,这时可把字符数组作为一个整体来使用。

6.2.1 字符数组的定义

字符数组的定义与一般数组的定义完全相同,只是在字符数组中,每一个元素的值为所存放字符的ASCII码值。定义字符数组的一般格式为:

《存储类型》char <数组名>[<常量表达式>];

在 C++语言中,可以将字符的值作为整数来处理, 整数也可以作为字符来处理(整数的值应在0至255之间)。从这个意义上讲,字符型和整数型之间是通用的, 但二者又是有区别的。例如:

char s1[100];

int s2[100];

为s1分配的的存储空间为100个字节, 而为s2分配的存储空间为400个字节。6.2.2 字符数组的初始化

在定义字符数组时,给字符数组初始化的方法有以下几种:

1、在花括号中依次列出各个字符,字符之间用逗号隔开。如:

char s[10] = { 'I',' ','a','m',' ','s','t','u'};

使 s[0]= 'I',s[1]= ' ',......,s[8]= s[9]=0。应保证在花括号中列出的字符个数小于或等于字符数组的大小。当仅列出数组的前一部分的元素值时,其余元素的值由系统自动置为空(其ASCII码值为0)。当列举的字符个数大于数组的大小时,编译给出语法错误。

2、与一维数组相同,可在定义字符数组时,不指定数组的大小,由系统根据所列举的字符个数来确定字符数组的大小。如:

char ss1[ ] = {'I',' ','a','m', ' ','a' ,'s','t','u'};

定义了字符数组ss1的大小9。

3、把用双引号括起来的一个字符串作为字符数组的初值。如:

char s4[80]={ "You are students!"};

char s3[100]="I am a student!";

用花括号把字符串括起来与不括起来的效果是相同的,都是将字符串中的每一个字符依次存放到数组的元素中。当列举的字符个数小于数组的大小时,没有列举出的元素值均为0 也是用字符'\0'来表示)。如字符数组s3,经赋初值后,s3[0]='I',s3[1]= ' ',s3[2]= 'a',......,s3[14]= '!',其余元素的值均为0。这种置初值的方式,也可以不指定字符数组的大小。如:

char s4[ ]="I am a student!";

则指定数组s4的元素个数为16,这值比实际字符串中的字符个数大1。最后增加的一个元素存放字符串的结束符(其值为0)。而说明:

char ss1[ ]={'I',' ','a','m', ' ','a' ,'s','t','u','d', 'e', 'n','t', '! '};

由于列举了15个字符,数组ss1的大小为15。要注意到用字符串置初值与依次列举字符置初值之间的差异。

6.2.3 字符数组的使用

使用字符数组中某一元素的方法与一般的数组相同,一维数组用一维下标,二维数组用二维下标。多维数组使用多维下标。如:

char x[20], s1[20][15];

......

x[5]='a'; s1[2][5] = 'f';

例 6.9 依次输出字符数组中的每一个字符。

#include

void main (void )

{

char s3[]="I am a student!";

for(int i=0;i

cout<<'\n';

}

执行程序后的输出为:

I am a student!

在 C++语言中,可以把字符数组中存放的字符作为字符串来处理。在使用的过程中要注意字符串的结束符,字符串的结束符是'\0'或0。把字符数组作为字符串使用时,当遇到'\0',就认为字符串结束,而不管其数组定义时的大小。当逐个地使用字符数组中的字符时,可以不关心字符串的结束符。字符数组在输入输出时,通常是作为字符串来处理的。

6.2.4 字符数组的输入输出

字符数组的输入输出方法有二种:

1、逐个字符的输入输出。这种输入输出的方法,通常是使用循环语句来实现的。如:

char str[10];

cout<<”输入十个字符:”;

for(int I=0;I<10;I++) cin>>str[I]; //A

......

A行将输入的十个字符依次送给数组str中的各个元素。

2、把字符数组作为字符串输入输出。对于一维字符数组的输入,在cin中仅给出数组名;输出时,在cout中也只给出数组名。

例 6.10 将二个字符串分别输入送二个字符数组,并把这二个数组中的字符串输出。

#include

void main (void )

{

char s1[50],s2[60];

cout << "输入二个字符串:";

cin >> s1;

cin >> s2;

cout << "\n s1 = " << s1;

cout << "\n s2 = " << s2 << "\n";

}

在执行期间, 在输出的提示符“输入字符串:”后,输入以下字符串时:strings is abc.

输出为:

s1 = strings

s2 = is

显然将输入的字符串“strings”送到s1中,将“is”送给s2。注意: 在输入字符串时,遇到空格字符或换行字符(Enter 键),就认为一个字符串的结束;接着的非空格字符作为一个新的字符串开始。把一个字符数组中的字符作为字符串输出时,当遇到字符’\0’时,认为字符串结束。当要把输入的一行作为一个字符串送到字符数组中时,则要使用函数 cin.getline( )。这函数的第一个参数为字符数组名,第二个参数为允许输入的最大字符个数。

例 6.11 使用函数cin.getline( )实现字符串的输入。

#include

void main (void )

{

char s3[81];

char s4[8]={'s','j','f','s','k','l','f','j'};

cout<<"输入一行字符串:";

cin.getline(s3,80); //A

cout<<"s3="<

cout<<"s4="<

}

执行程序时,在提示信息“输入一行字符串:”后输入:

You are students.

接着输出:

s3= You are students.

s4=sjfsklfjYou are students.

程序中的A行把输入的一行字符串“You are students.”送给s3。当输入行中的字符个数小于80时,将实际输入的字符串(不包括换行符)全部送给s3;当输入行中的字符个数大于80时,只取前面的80个字符送给字符串。B行输出s3中的字符串。C行的输出除了字符数组s4中包含的8个字符外,还输出了其它的字符。由于是按逐个字符的方式给s4初始化的,而不是按字符串的方式初始化,所以s4中没有字符串的结束符。把s4中的字符作为字符串输出时,由于在最后的一个字符'j'后没有结束字符,仍把紧跟其后存储空间中的值作为字符输出,直至遇到字符串结束字符为止。所以,当把字符数组中的字符作为字符串输出时,必须保证在这个数组中包含字符串结束符。