C++ string類詳解

2020-07-16 10:04:42
從易於程式設計的角度來看,標準庫 string 類和 C 字串相比多了幾個優點。

正如本章前面所述,string 類有若干個成員函數和過載運算子。這些都可以簡化任務,例如在一個字串中查詢一個字元或字串,用 C 字串執行起來就既困難又繁瑣。

本節將回顧一些使用 string 的基本操作,然後討論更多的 string 類的成員函數。

任何使用 string 類的程式都必須使用 #include 包含 string 標頭檔案。然後可以使用如表 1 所示的建構函式中的任何一個建立 string 物件。

表 1 string建構函式
定 義 描 述
string() 預設建構函式:建立空字串。範例:string str ();
string(const char *s) 轉換建構函式:使用 C 字串建立一個 string 物件。範例:string name("William Smith");
string(const string &s) 複製建構函式:從現有字串建立一個新的字串。範例: string name1(s);

string 類過載的運算子如表 2 所示。

表 2 string 類運算子
過載運算子 描 述
>> 從流中提取字元並將其插入到字串中。複製字元直至遇到空格或輸入的結尾
<< 將字串插入流中
= 將右側的字串賦值給左側的 string 物件
+= 將右側字串的副本附加到左側的 string 物件
+ 返回將兩個字串連線在一起所形成的字串
[] 使用陣列下標表示法,如 name[x]。返回 x 位置的字元的參照
關係運算子 以下每個關係運算子都將被執行:< > <= >= = !=

string 類還有若干個成員函數。例如,size 函數將返回字串的長度。表 3 列出了許多 string 類成員函數及其過載的變體。在某些情況下,傳遞給成員函數的實參可能會使請求的操作不可能。在這些情況下,成員函數將通過拋出異常來指示錯誤的發生。

表 3 string 類的成員函數
成員函數範例 描 述
theString.append(str); 將 str 追加到 theString。實參 six 可以是一個 string 物件或 C 字串
theString.append(str, p, n); 從位置 p 開始,str 中的 n 個字元被附加到 theString 中。如果從 p 開始的 str 的子串少於 n 個字元,則會引發異常
theString.append(str, n); C 字串 str 的前 n 個字元被附加到 theString 中
theString.append(n, ch); 將字元 ch 的 n 個副本附加到 theString 中
theString.assign(str); 將 str 賦值給 theString。形參 str 可以是 string 物件或 C 字串
theString.assign(str, p, n); 從位置 p 開始,str 中的 n 個字元被賦值給 theString。如果從 p 開始的 str 的子串少於 n 個字元,則會引發異常
theString.at(p); 返回字串中 p 位置的字元。它與 theString[p] 返回的值是一樣的
theString.begin(); 返回指向 theString 中第一個字元的疊代器。
theString.capacity(); 返回 theString 被分配的儲存的大小
theString.clear(); 通過刪除 theString 中儲存的所有字元來清除字串
theString.compare(str); 以 strcmp 的方式比較 theString 和 str。str 實參可能是一個 string 物件,也可能是一個 C 字串
theString.copy(str, p, n); 將從 theString 的位置 p 開始的長度為 n 的子串複製到字元陣列 str 中。如果 theString 在給定位置 p 之後少於 n 個字元,則會引發異常
theString.c_str(): 返回 theString 物件的 C 字串值
theString.data(); 返回一個包含 null 終止字串的字元陣列,就像儲存在 theString 中的一樣
theString.empty(); 如果 theString 為空則返回 true,否則返回 false
theString.end(); 返回指向 theString 中最後一個字元的疊代器。
theString.erase(p, n); 從 theString 的位置 p 開始,刪除 n 個字元
theString.find(str, p); 返回在 theString 中找到的 str 字串的第一個位置。形參 str 可以是 string 物件或 C 字串。如果沒有找到 str,則返回 theString 類的靜態成員 string::npos
theString.find(ch, p); 返回在 theString 中找到的 ch 字元的第一個位置。如果沒有找到 ch,則返回 string::npos
theString.insert(p, str); 將 str 的副本插入到 theString 中,從位置 p 開始。str 實參可以是 string 物件, 也可以是 C 字串
theString.length(); 返回 theString 中字串的長度
theString.replace(p, n, str); 使用 string 物件 str 中的字元替換 theString 中的 n 個字元,從位置 p 開始
theString. size(); 返回 theString 中字串的長度
theString.substr(p, n); 返回一個子串的副本。子串長度為 n 個字元,從 theString 的 p 位置開始
theString. swap(str); 交換 theString 和 str 的內容