![](/notes/imgs/wechat-color.jpg)
5.8 字符数组和字符串
发布时间:
字符数组
字符数组是指元素为字符的数组。字符数组是用来存放字符序列或字符串的。字符数组也有一维、二维和三维之分。
一 、 字符数组的定义
[存储类型] char 数组名[常量表达式1]…
char ch1[5]; //数组ch1是一个具有5个字符元素的一维字符数组
char ch2[3][5]; //数组ch2是一个具有15个字符元素的二维字符数组
字符数组定义格式同于一般数组,所不同的是数组类型是字符型,第一个元素同样是从ch1[0]开始,而不是ch1[1]。
二、 字符数组的赋值
(1).用字符初始化数组
char chr1[5]={‘a’,‘b’,‘c’,‘d’,‘e’}; //始值个数少于元素个数时,从首元素开始赋值,剩余元素默认为空字符
char chr2[5]={‘a’,‘b’,‘c’,‘d’,‘\0’}; //即在数组chr2中存放着一个字符串“abcd”。
字符数组可存放若干字符,也可存放字符串。区别是字符串有结束符(‘\0’)。 反过来说,在一维字符数组中存放着带有结束符的若干个字符称为字符串。字符串是一维数组,但是一维字符数组不等于字符串。
(2).用字符串初始化数组
char chr2[5]=“abcd”;
使用此格式均要注意字符串的长度应小于字符数组的大小或等于字符数组的大小减1。同理,对二维字符数组来讲,可存放若干个字符串。可使用由若干个字符串组成的初始值表给二维字符数组初始化。
例如:char chr3[3][4]={“abc”,“mno”,“xyz”};在数组ch3中存放3个字符串,每个字符串的长度不得大于3。
(3).数组元素赋值
字符数组的赋值是给该字符数组的各个元素赋一个字符值。例如:
char chr[3];
chr[0]=‘a’; chr[1]=‘b’;chr[2]=‘c’;
对二维、三维字符数组也是如此。当需要将一个数组的全部元素值赋予另一数组时,不可以用数组名直接赋值的方式,要使用字符串拷贝函数来完成。
(4).字符常量和字符串常量的区别
①两者的定界符不同,字符常量由单引号括起来,字符串常量由双引号括起来。
②字符常量只能是单个字符,字符串常量则可以是多个字符。
③可以把一个字符常量赋给一个字符变量,但不能把一个字符串常量赋给一个字符变量。
④字符常量占一个字节,而字符串常量占用字节数等于字符串的字节数加1。增加的一个字节中存放字符串结束标志‘\0’。例如:字符常量‘a’占一个字节,字符串常量“a”占二个字节。
(5).用getchar()获取连续字符包括空格
三 综合运用
【例5.16】过滤空格
过滤多余的空格。一个句子中也许有多个连续空格,过滤掉多余的空格,只留下一个空格。
输入样例
Hello world.This is c language.
输出样例
Hello world.This is c language.
#include <iostream>
using namespace std;
int main() { // 【例5.16】过滤空格
int i = 0;
char a[1000];
memset(a, '0', sizeof(a));
a[0] = getchar();
char b ;
do {
b = getchar();
if (b == ' ' &&a[i]==' '){
}else{
a[++i]=b;
}
} while (b!='\n');
a[++i]='\0';//字符数组存字符串,添加’\0‘结尾标志。
cout << a;
return 0;
}