本文转载自:VC驿站
https://www.cctry.com/thread-288729-1-1.html
1、什么是字符数组?
说白了,字符数组就是数组中存放的是字符,即 char 类型。例如:char szbuf[50];
因为字符串本身就是有一个一个的字符组合而成的,所以,字符数组可以理解为是一个字符串。在以后的C++编程过程中会遇到各种各样对字符串的操作。
2、字符数组的初始化:
方式①:定义之后分别对每个字符初始化;
char szbuf[10];
szbuf[0] = 'h';
szbuf[1] = 'e';
szbuf[2] = 'l';
szbuf[3] = 'l';
szbuf[4] = 'o';
备注:未初始化的部分值随机。
方式②:定义即初始化:
char szbuf[10] = {'h', 'e', 'l', 'l', 'o'};
或者:
char szbuf[10] = "hello";
备注:未初始化的部分值为0.
注意:
如果初始值的个数小于数组的长度,则只将这些字符赋值给数组中前面的那些元素,其余元素自动赋值为 \0 字符,也就是0;
如果初始值的个数大于数组的长度,则直接报语法错误。
方式③、自动初始化长度:
char szbuf[] = {'h', 'e', 'l', 'l', 'o', ' ', 'f', 'r', 'i', 'e', 'n', 'd', 's', ' ', 'I', ' ', 'a', 'm', ' ', 'c', 'c', 't', 'r', 'y', '.', 'c', 'o', 'm'};
如果字符串的长度比较长,而且要定义的数组长度就是字符串的长度,那么就可以使用此方法。
或者:
char szbuf[] = "hello friends I am cctry.com";
3、字符数组与字符串的区别:
区别就是字符串比字符数组多了一个结束标志的字符:'\0',这个字符的ASCII码就是0,所以作为一个字符串来说,其有效字符就是结束标志\0之前的字符。字符串的长度也是结束标志\0之前的字符,但是字符串所占用的字节数或者说字符串所占用的空间是包含字符串结束标志\0的。所以一般情况下关于一个字符串的长度不用很显示的给出或者告诉,直接对当前字符串从头往后找结束标志\0就可以了,遇到了就表示这个字符串结束了。
例如:
char szbuf[5];
szbuf[0] = 'h';
szbuf[1] = 'e';
szbuf[2] = 'l';
szbuf[3] = 'l';
szbuf[4] = 'o';
这个就是个字符数组,不是字符串,因为结尾没有字符串结束的标志\0,但是如果我这样定义:
char szbuf[6];
szbuf[0] = 'h';
szbuf[1] = 'e';
szbuf[2] = 'l';
szbuf[3] = 'l';
szbuf[4] = 'o';
szbuf[5] = '\0';
这个字符数组就可以看成是一个字符串,因为他满足字符串的所有条件。
再来看一个例子:定义即初始化:
char szbuf[10] = {'h', 'e', 'l', 'l', 'o'};
因为数组的长度是10,hello5个字符的长度是5,所以之后剩下的5个未被初始化的字符会置为0,所以这种方式满足字符串的条件。
或者:
char szbuf[10] = "hello";
这种方式使用一个字符串来初始化字符数组,因为用字符串来进行初始化,所以会把字符串结束标志\0一并初始化给字符数组szbuf的,所以这种方式也满足字符串的条件。
4、字符数组的输入与输出:
举例①:
char szbuf[50];
cin >> szbuf;
cout << szbuf << endl;
举例②、
char szbuf[50] = {'h', 'e', 'l', 'l', 'o', '\0', ' ', 'f', 'r', 'i', 'e', 'n', 'd', 's', '.'};
cout << szbuf << endl;
大家猜猜会输出什么内容呢?
5、小作业:
题目:字符数组定义如下:
char szbuf[100] = "hello, friends, my name is cctry.com. what is your name ?";
遍历字符数组 szbuf,将其中的字符 i 替换成 @ 符号,并统计其个数。最后将统计的个数及整个字符串的内容都输出出来?
大家试试吧!
第20课视频教程下载地址: