c++ --string操作
順序容器--額外的string操作
除了順序容器共同的操作之外,string類型還提供了一些額外的操作。這些操作中大致可以分為兩部分:
1. 提供string類和C風格字符出租之間的相互轉換;
2. 增加了允許我們用下標代替叠代器的版本。
構造string的其他方法
n,len2和pos2都是無符號值 | |
string s(cp,n) | s是cp 指向的數組中前n 個字符的拷貝。此數組至少應該包含n個字符 |
string s(s2,pos2) | s是string s2 從下標pos2 開始的字符的拷貝。若pos2>s2.size(),構造函數的行為未定義。 |
string s(s2,pos2,len2) |
s是string s2 從下標pos2 開始len2 個字符的拷貝。若pos2 > s2.size(),構造函數的行為未定義。不管len2 的值是多少, 構造函數至多拷貝s2.size()-pos2個字符。 |
這些構造函數接受一個string 或一個const char* 參數
substr(pos,n) 操作
substr操作返回一個string,它是原始string的一部分貨全部的拷貝。可以傳遞給substr 一個可選的開始位置和計數值:
string s("hello world");
//返回一個string,包含s 中從pos 開始的n 個字符的拷貝。pos的默認值為0。n的默認值為s,size()-pos, 即拷貝從pos開始的所有字符
string s1=s.substr(pos,n);
改變string的其他方法
修改string 的操作 |
常用場景 | |
s.assign(args) | 將s 中的字符替換為args 指定的字符。返回一個指向s 的引用 | 替換s 中的所有內容 |
s.append(args) | 將args 追加到s末尾。返回一個指向s 的引用。 | 將新字符追加到s 末尾 |
s.insert(pos,args) |
在pos 之前插入args 指定的字符。pos 可以使一個下標或一個叠代器。 接受下標的版本返回一個指向s 的引用;接受叠代器的版本返回指向第一個插入字符的叠代器。 |
在給定位置之前插入新字符 |
s.replace(range,args) |
刪除s 中range 內的字符,替換為args 指定的字符。 range 或者是一個下標和一個長度,或者是一對指向s 的叠代器。返回一個指向s 的引用。 |
刪除指定範圍字符,並插入新字符 (新舊字符長度可以不一樣長) |
新字符可以來自於:1. 另一個string;2. 一個字符指針(指向的字符數組);3. 一個花括號包圍的字符列表。當字符來自於一個string 或一個字符指針時,我們可以傳遞一個額外的參數來控制是拷貝部分還是全部字符。例如,s.insert(0, s2, 0, s2.size()); //在s[0]之前插入s2 中s2[0] 開始的s2.size() 個字符。
並不是每個函數都支持所有形式的參數。例如,insert 就不支持下標和初始化列表參數。類似的,如果我們希望用叠代器指定插入點,就不能用字符指針指定新字符的來源。
string 搜索操作
string 類提供了6個不同的搜索函數,每個函數都有4個重載版本。每個搜索操作都返回一個string::size_type (無符號類型)值,表示匹配發生位置的下標。如果未找到,返回npos (初始化為-1)。
string 搜索操作 | |
s.find(args) | 查找s 中args 第一次出現的位置 |
s.rfind(args) | 查找s 中args 最後一次出現的位置 |
s.find_first_of(args) | 在s 中查找args 中任何一個字符第一次出現的位置 |
s.find_last_of(args) | 在s 中查找args 中任何一個字符最後一次出現的位置 |
s.find_first_not_of(args) | 在s 中查找第一個不在args 中的字符 |
s.find_last_not_of(args) | 在s 中查找最後一個不在args 中的字符 |
args 必須是以下形式之一 |
註意:第2個參數才表示位置,與前面改變string 的成員函數不一樣 |
c, pos | 從s 中位置pos開始查找字符c. pos 默認為0 |
s2, pos |
從s 中位置pos 開始查找字符串s2。 pos默認為0 |
cp, pos |
從s 中位置pos 開始查找指針cp 指向的以空字符結尾的C 風格字符串。 pos 默認為0 |
cp, pos, n |
從s 中位置pos 開始查找指針cp 指向的數組的前n 個字符。 pos 和n 無默認值 |
compare函數
標準庫string 類型提供了一組compare 函數,類似C 標準庫的strcmp 函數,根據s 是等於、大於還是小於參數指定的字符串,s.compare(args) 返回0,正數或負數。
根據參數的不同,compare函數有6個重載版本。具體args 形式參見c++ primer P327,表9.15.
數值轉換
新標準引入了多個函數,可以實現數值數據與標準庫string之間的轉換:
具體轉換函數,參見c++primer P328,表9.16.
c++ --string操作