順序容器 - 3【C++ Primer 學習筆記 - 第九章】

string 操作
string s; 定義一個新的空string 對象,命名爲 s
string s(cp); 定義一個新的 string 對象,用 cp 所指向的 C風格字符串初始化該對象
string s(s2); 定義一個新的 string 對象,將其初始化爲 s2 的副本
is >> s; 從輸入流 is 中讀取一個以空白字符分隔的字符串,寫入 s
os << s; 將 s 寫入到輸出流 os 中
getline( is, s); 從輸入流 is 中讀取一行字符,寫入 s
s1+ s2; 將 s1 和 s2 串接起來,產生一個新的 string 對象
s1 += s2; 將 s2 拼接在 s1 後面
關係操作符 ==
!=
<
<=
>
>=












string 可以看成字符容器,同 vector 一樣,連續存儲,支持 capacity 和 reserve 操作。
支持 begin 、 end、 erase、 clear 等操作,
但是,不支持 push_front、back、front 等操作。


string s("Hello world");
string::iterator iter = s.begin();
while(iter!=s.end())
	cout << *iter++;
cout << endl;


構造 string 對象的其他方法
string s(cp, n) 創建一個string 對象,它被初始化爲 cp 所指向數組的前 n 個元素的副本
string s(s2, pos2) 創建一個 string 對象,
它被初始化爲一個已經存在的 string 對象 s2 中從下標 pos2 開始的字符串副本
如果 pos2 > s2.size(); 則操作未定義
string s(s2, pos2, len2) 創建一個 string 對象
它被初始化爲 s2 中從下標 pos2 開始的 len2 個字符的副本。
如果 pos2 > s2.size(); 則操作未定義
無論 len2 是多少,最多隻能複製 s2.size() - pos2 個字符










string s1;
string s2(5, 'a');
string s3(s2);
string s4(s3.begin(), s3.begin() + s3.size()/2);

char *cp = "Hiya";
char c_array[] = "world!!!!";
char no_null[] = {'H', 'i'};
string s5(cp);		// "Hiya"
string s6(c_array, 5);	// "world"
string s7(c_array+5, 4);	// "!!!!"
// 錯誤:string s8(no_null);  no_null 不是空字符結尾
string s8(no_null, 2);

// 注意與 string s6(c_array, 5); 的區別
string s9(s5, 2);	// "ya"
string s10(s5, 0, 2);	// "Hi"
string s11(s5, 0, 100);	// "Hiya"


string 類型特有的版本(此表除非特殊說明,都返回 s 的引用)
s.insert(pos, n, c) 在下標爲 pos 的元素之前插入 n 個字符 c
s.insert(pos, s2) 在下標爲 pos 的元素之前插入 string 對象的副本 s2
s.insert(pos, s2, pos2, len) 在下標爲 pos 的元素之前插入 s2 中從下標 pos2 開始的 len 個字符
s.insert(pos, cp, len) 在下標爲 pos 的元素之前插入 cp 所指向的數組的前 n 個字符
s.insert(pos, cp) 在下標爲 pos 的元素之前插入 cp 所指向的以空字符結束的字符串的副本
s.assign(s2) 用 s2 的副本替換 s
s.assign(s2, pos2, len) 用 s2 中從下標 pos2 開始的 len 個字符副本替換 s
s.assign(cp, len) 用 cp 指向的數組的前 len 個字符副本替換 s
s.assign(cp) 用 cp 指向的以空字符結束的字符串副本來替換 s
s.erase(pos, len) 刪除從下標 pos 開始的 len 個字符










發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章