字符串是存储在内存的连续字节中的一系列字符。
C++中定义字符串有两种方式:第一种是来自C语言,称为C风格的字符串;第二种是利用string类来定义。
第一种方法:
一种是逐个字符给字符数组复制,但是最后一个元素要为'/0',否则它只能是字符,而不是字符串。char cat[5] = {'f', 'a', 't', 's', '/0'}; 如果用cout输出cat的话将会输出一些意想不到的字符,这是因为cout不是在字符数组结束的地方停止输出,而是直到遇到'/0'才会停止输出,而内存中有很多'/0',所以,它很快就会停止输出,而且会输出一些奇怪的字符(字符数组后面的内存中原来存在的字符)。
另一种是直接将一个字符串赋给字符数组,如char fish[5] = "fats"; 值得注意的是"fats"表示的是字符串所在的内存地址,在它的后面不用加'/0',它自己会自动加。
第二种方法:string类来定义字符串;直接声明就可以定义一个字符串,如 string str1。它的优点是可以自动调整字符串的长度,不会出现超出长度的局限。
它和用字符数组定义的字符串有一定的相同点:都可以用数组下标的方法来指定字符串中的字符;
都可以用cin、cout来输入和输出字符串。
但是它们也有区别:拼接字符串和字符串赋值:char字符数组利用函数strcat、strcpy来实现,char* strcpy(char* to, char*
from), char* strcat(char* to, char* from);string类直接采用变量赋值和"+"操作符
来实现,如 string str1, str2,str3; str1 = str2; str3 = str1 + str2;
当给字符串赋值为一行字符串而不是一个单词:字符数组采用,cin.getline或者cin.get;
string类采用getline(cin, str1);
初始化的区别:初始化采用"="操作符,其他的时候只能采用函数strcpy或者strncpy来
给数组赋值字符串,字符数组如果没有初始化,它的内容为原来内存中的内容;string
类则不同,没有初始化它的内容为空,长度为0。
在这里再重申一下cin的一些用法:为一个变量输入值时,cin把回车值留在了输入队列,如果用cin.get和cin.getline时,则下一个变量不会有值输入,而是读取了回车值,可以在cin.get和cin.getline前面加上一个cin.get()或者getchar()即可;如果是读取一个单词或者一个整数则没有影响,直接用cin即可!