一、String 簡介
String 的特色
- 提供了大量的字串操作函式。
- 可與 C 語言風格字串雙向轉換。
二、成員函式介紹
string overload 許多 operator,包括 +、+=、<、=、[]、<<、>> 等,這些 operator 對字串操作非常方便,因此 assign()、append()、compare() 等函數,除非一些特殊需求,不然一般是用不上。儘量使用 operator,這樣可以讓程序更加易懂。
常用方法
- 賦值 = : 將字串指定給另一個字串。
- 相等比較 == : 比較兩個字串的字元內容是否相同。
- 串接字串 + : 直接使用 + 運算子來串接字串。
- 存取字符 []、str.at() : 如字元陣列的操作,at 帶邊界檢查。
- 字串長度 str.size() : 字串長度。
- 字串為空 str.empty() : 字串是否為空
- 字串長度 str.length() : 字串的長度。
[用心去感覺] 串接 operator +
只要等式裡有一個 string,就可以一直連續用 string overload 的 + 功能。(需要注意的是,在開始的兩項中必須有一項是 string,不然 compiler 在解語法樹的時候會出錯。)
[用心去感覺] 賦值 operator =
可以將一個 C-Style 的字串指定給 string,但不能將一個 string 指定給 char 陣列。
[用心去感覺] 存取 operator [], str.at()
講究效率,使用 [],講究穩定性,使用at()。
講究效率,使用 [],講究穩定性,使用at()。
進階用法
- assign(str, start, num) : 從 str 的第 start 個字元取出 num 個字元來指定給另一字串物件。
- append(str, start, num) : 從 str 的第 start 個字元取出 num 個字元來附加至另一字串物件之後。
- find(str, 0) : 從引發 find() 的字串物件中第 0 個字元尋找是否有符合 str 的子字串。
- insert(start, str) : 將 str 插入引發 insert() 的字串物件第 start 個字元之後。
[用心去感覺] find() 錯誤返回 basic_string::npos
basic_string::npos
static const size_type npos = -1;
npos 是一個常數,表示 size_t 的最大值。許多容器都有提供,用以表示不存在的位置。
三、常用的string程式寫法
#include <iostream> #include <string> using namespace std; int main() { string str1; string str2("caterpillar"); string str3(str2); // assign: 指定字串 str1 = str1.assign(str2, 0, 5); cout << "str1: " << str1 << endl; str1 = str1.assign("caterpillar", 5, 6); cout << "str1: " << str1 << endl; str1 = ""; // append: 字串串接 str1 = str1.append(str2, 0, 5); str1 = str1.append(str3, 5, 6); cout << "str1: " << str1 << endl; // find: 尋找字串位置 cout << "尋找str1中的第一個pill: " << str1.find("pill", 0) << endl; // insert: 插入字串 cout << "在str1插入字串***: " << str1.insert(5, "***") << endl; cout << "str1長度: " << str1.length() << endl; return 0; }
執行結果:
str1: cater
str1: pillar
str1: caterpillar
尋找str1中的第一個pill: 5
在str1插入字串***: cater***pillar
str1長度: 14
str1: cater
str1: pillar
str1: caterpillar
尋找str1中的第一個pill: 5
在str1插入字串***: cater***pillar
str1長度: 14
References
wiki - string (C++標準庫)
Beyond the Void - C++ string 用法詳解
使用 string 型態