1、数组
声明形式:typename arrayname[arraysize];
初始化形式:typename arrayname[arraysize] = {......};
所有元素类型必须相同,大小在声明或初始化时确定,不能使用变量(可以使用new运算符来解决)。
sizeof arrayName得到整个数组的字节数;sizeof arrayName[n]得到数组中一个元素的字节数。
初始化规则1:数组只有在定义时可以初始化,之后就不能使用,也不能将一个数组赋给另一个数组;
初始化规则2:初始化时提供的值的数量可以少于数组的元素数目,后面的元素被赋值为0;
初始化规则3:可以不指定数组的元素数目,编译器自动计算元素个数。
2、字符串(C-style)
C风格字符串以char数组存储,特殊性质:以空字符\0(ASCII为0)结尾,例如:
char dog[7] = {'d','o','g',' ','d','o','g'};
char cat[7] = {'d','o','g','d','o','g','\0'}; //字符串表示方法1
这两个数组,前者不是字符串(没有以空字符'\0'结尾),后者是字符串(一定要以空格结尾)。
char bird[11] = "Mr. Cheep";或char fish[] = "Bubbles";//字符串表示方法2
这种表示方法称为字符串场常量,隐式的在结尾以空格表示,所以bird的长度为11,一般让编译器自己计算字符串长度。
注意:字符串常量使用双引号,字符常量使用单引号。字符常量存储的是单个字符的Ascii,而字符串常量存储的实际是内存地址。例如:char s = 'S';则s存储的是83。char s = “S”;则s存储的是S和空格符这一字符串的存储地址。
(呀呀呀呀,空格和空字符不一样不一样不一样!!!空字符不能使用键盘输入)
在使用cin输入时,由于不能使用键盘输入空字符,cin便使用空白(空格,制表符和换行符)来确定字符串的结束,存入时自动在结尾加入空字符,这样一来,cin在获取字符数组输入时便只能读取一个单词。为了获取一行,需要使用cin中面向行的类成员函数getline()或get()(他们均是istream的类方法,而cin是istream的对象),这两个函数都以换行符作为输入结束,只是getline()丢弃换行符而get()将换行符保留在输入队列中。使用方法如下:
cin.getline(arrayName,arraySize);//其中arraySize包含空字符,当读到换行符或读取了arraySize-1个字符时即停止读取;
cin.getline(name1,Size1).get(name2,Size2);//读取连续两行,与两次连续调用效果一样。
cin.get(name,size);//只读取一行时域getline()使用方法一样;
cin.get(name1,size1).get(); cin.get(name2,size2).get();//连续读取两行
或cin.get(name1,size1); cin.get(); cin.get(name2,size2);
当读取到空行时,getline将空字符赋给数组,get设置失效位,接下来的输入被阻断;
当输入字符过长时,将余下字符留在输入队列中,getline同时设置失效位以阻断后续输入;
注意,若前面使用了cin,可能输入队列有换行符,应使用cin.get();以消除空行影响。
strlen(arrayName);用于求数组中可见字符的数目,不计算空字符;sizeof(arrayName)计算数组本身的长度。
3、字符串(string类)
使用头文件#include <string>;string类位于命名空间std中。
形式:string Name = "string";等方式,不用指定字符串的长度。
可以将一个string对象赋值给另一个string对象;可以直接利用加号(+)将两个字符串拼接为一个。使用Name.size()求长度,与字符数组中strlen()效果一样。
在C语言中,可以使用string.h中的函数对字符数组进行操作:
strcpy(charr1,charr2);//将charr2复制给charr1;
strcat(charr1,charr2);//将charr2附加在charr1末尾;
使用函数对字符数组进行操作时,需要注意数组长度,而C++中使用string类则不需要考虑这个问题。