字符串:储存在内存的连续字节中的一系列字符。C++处理字符串的方式分为两种:
1、C-风格字符串;
C-风格字符串的特殊性质:以空字符(null character)结尾,空字符被写作'\0',其ASCII码为0,用来标记字符串的结尾。
(1)char数组——将字符串存储在char数组中,其中每个字符都位于自己的数组元素中。
例:
char dog[8]={'b','e','a','u','x',' ','I','I'};//not a string
char cat[8]={'f','a','t','e','s','s','a','\0'};//a string
上述两个数组都是char数组,但只有第二个才是字符串。
字符串常量(字符串字面值)——使用一个用引号括起的字符串。用引号括起的字符串隐式地包含结尾的空字符,不用显示的包括。此外,各种C++输入工具通过键盘输入,将字符串读入到char数组是,将自动加上结尾的空字符。
例:
char bird[11]="Mr.Cheeps";//the \0 is understood
char fish[]="Bubbles";//let the compiler count
注意:字符串常量(使用双引号)不能与字符常量(使用单引号)互换:'S'表示字符常量,而"s"表示字符S和\0组成的字符串。
C++允许拼接字符创字面值,即将两个用引号括起的字符串合并为一个,任何两个由空白(空格、制表符和换行符)分割的字符串常量都将自动拼接成一个。拼接式不会再被连接的字符串之间添加空格,第二个字符串的第一个字符将紧跟在第一个字符串的最后一个字符(不考虑\0)后面,第一个字符串中的\0字符将被第二个字符串中第一个字符取代。
sizeof运算符指出整个数组的长度,strlen()函数返回的是存储在数组中的字符串的长度,而不是数组本身的长度,并且,strlen()只计算可见的字符,忽略空字符。
const int size=15;
char name[size]="C++owboy";
strlen(name);//8
sizeof(name);//15
2、string类——提供了将字符串作为一种数据类型的表示方法。
使用string类,需包含头文件string,并且由于string类位于名称空间std中,因此需要using指令或者使用std::using引用。
string隐藏了字符串的数组性质,使得能够像处理普通变量那样处理字符串。
string可以使用数组表示法来访问存储在string对象中的字符。
类设计让程序能够自动处理 string的大小。
string类某些操作比使用数组更简单:
(1)不能将一个数组赋给另一个数组,但可以将一个string对象赋给另一个string对象。
例:
char charr1[20];
char charr2[20]="jaguar";
string str1;
string str2="panther";
charr1=charr2;//invalid
str1=str2;//valid
(2)string类简化了字符串合并操作,可以直接使用运算符+将两个string对象合并起来,还可以使用运算符+=将字符串附加到string对象的末尾。
例:
string str1;
string str2;
string str3;
str3=str1+str2;//assign str3 the joined strings
str1+=str2;//add str2 to the end of str1