從易於程式設計的角度來看,標準庫
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 的內容 |