整理自 <C++ Primer Plus(第六版)>
C++ 字符串既保留了C中的字符数组的形式(C-style string), 又有一个专门的 String
类库.
C-style string
这种类型的字符串表达为 以\0
结尾的char数组. \0
是空字符null character
, ASCII码是 0.
初始化
char dog[5] = {'h', 'e', 'l', 'l', 'l'}; // not a string
char cat[9] = {'I', ' ', 'a', 'm', ' ', 'T', 'o', 'm', '\0'}; // is a string
char str_cat1[9] = "I am Tom"; // make sure keep enough space for the '\0'
char str_cat2[] = "I am Tom"; // auto add '\0' at the end
char boss[8] = "Harry"; // auto supply '\0' after the last char
IO
cin
使用空白(space
, Tab\t
, Enter\n
) 来确定字符串的结束位置.
因此在字符串输入时, 如果句子中有空格就会切断输入, 只记录第一个单词. 解决办法是使用 istream
类中的 getline()
, get()
函数.
getline(arr, arr_size)
以换行符作为结束的标志, 读取了换行符并用空字符替换了.
get(arr, arr_size)
以换行符作为结束的标志, 但不读取换行符, 将其留在了输入流中.
注意, 当get()
没有参数时, 仅读取一个字符.
常用的函数
strlen(arr)
: 返回数组中字符串的长度, 不含空字符. 即第一个字符到第一个\0
的长度.strcat(arr1, arr2)
: arr1 += arr2strcpy(arr1, arr2)
: arr1 = arr2
String 类
初始化
string str = "this is a example!";
IO
getline(cin, str)
与上面提到的getline不同, 这个不是istream
类的方法, 第一个参数是一个istream对象, 第二个参数是字符串变量.