事实上,在程序中不仅可以存储学生的成绩,还可以存储学生的名字、学科的名称。这就要用到字符数组和字符串。这里先来介绍字符数组。
在第2章曾经介绍过字符类型数据,字符类型是由一个单个字符组成的字符常量或字符变量。比如,下面两条语句定义了两个字符变量letter和num并进行初始化。
在内存中,一个字符数据只占用一个字节。
字符数组就是用于存储字符类型数据的数组。它是存储在内存中的一系列字符。比如,下面两条语句定义了两个字符数组dog和cat并进行初始化:
字符数组可以是一维数组,也可以是二维数组,及多维数组。
1.字符数组的定义
char数组名[整型表达式1]…;
例如:
2.给字符数组的元素赋值
与其他类型数组一样,可以初始化字符数组,也可以给每个数组元素赋值。
1)用字符列表初始化字符数组
例如,前面定义的dog和cat两个数组,就可分别用字符列表{'b','o','l','l','e','r'}和{'t','o','m','t','h','e','n'}初始化。
再如:
初始值表中每一个数据必须是一个字符,即用单引号括起来的单个字符。当字符列表中的字符个数少于元素个数时,从首元素开始赋值,其余未被赋值的元素自动赋值为空字符,空字符用“\0”来表示。例如,上面定义的name数组,初始值表中只有6个字符,所以从第7个元素name[6]开始,后面所有元素都为空字符。
2)用字符串初始化字符数组
字符串是用双引号括起来的一串字符,例如“caocao”。那么上面的name数组就可这样定义和初始化:char name[20]=“caocao”;
从这里可以看到,一个字符串实际上就相当于一个一维数组。但是要注意,字符串不能等同于字符列表。“caocao”不等同于{'c','a','o','c','a','o'}。因为C++在处理字符串时,总会在结尾加上一个空字符,所以“caocao”等于{'c','a','o','c','a','o','\0'}。“abcde”等于{'a','b','c','d','e','\0'}。
所以,在用字符串给字符数组初始化时,要注意字符串的长度应该小于或等于字符数组的大小减1。(www.xing528.com)
同样道理,可以用若干个字符串给二维字符数组初始化。
3)给字符数组元素赋值
可以给字符数组中的任何一个元素赋一个字符值。
3.字符数组应用举例
例6-11 在用电脑编辑文档时,经常会遇到需要进行查找替换的任务,比如把文档中的“电是”都换成“电视”。现在来模拟一下这个操作。
输入两行英文字符,第一行是原文,长度不超过100个字符;第二行包含以一个空格分隔的两个字符x和y。要求将原文中的所有字符x都替换成字符y。注意区分大小写。
思路分析:
(1)用一个一维数组存储原文。
(2)在原文数组中从头开始查找字符x,找到一个x,就用y来替换,然后继续寻找下一个x,找到了就用y替换,直到将原文全部查找一遍。
(3)读取字符,使用函数getchar(),因为这个函数能读取空格、回车符等不可见字符,而cin会自动过滤掉不可见字符。在使用getchar()时,需要调用<cstdio>库。
程序清单:
运行结果如下。
输入:
输出
程序说明:
(1)本程序只能查找和替换单个字符,不能查找替换单词。
(2)输入数据第二行x、y之间只能有一个空格。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。