1. 程式人生 > >c++primer學習筆記 string的一些額外操作

c++primer學習筆記 string的一些額外操作

1.string除了與其他順序容器相同的建構函式,還額外支援另外三個建構函式。

構造string的方法
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從下標開始len2個字元的拷貝,若pos2>s2.size(),建構函式的行為未定義。不管len2的值是多少,建構函式至多拷貝s2.size()-pos2個字元

以上的建構函式接收string或者const char*引數,還接收指定拷貝多少個字元的引數。
2.substr操作,返回一個string,是原始string的一部分或者全部拷貝。可以傳遞給substr一個可選的位置和計數值:

substr(pos, n);//返回一個string,包含s中從pos開始的n個字元的拷貝。
//pos的預設值為0.n的預設值為是s.size()-pos,即拷貝從pos開始的所有字元。	

string除了接收迭代器的insert和erase版本外,string還提供了接收下標的版本。下標指出了開始刪除的位置,獲知是insert到給定值之前的位置

s.insert(s.size(),5,'!');//在s末尾插入5個感嘆號
s.erase(s.size()-5,5);//從s末尾刪除最後五個字元

3.標準庫string型別還提供了接收c風格字串陣列的insert和assign版本。
例如:

const char *cp = "Stately, plump Buck";
s.assign(cp, 7);//s=="stately"
s.insert(s.size(),cp+7);//s=="Statelu, plump Buck";

首先呼叫assign替換s的內容,賦予s的是從cp指向的地址開始的7個字元。要求賦值的字元數必須小於等於cp指向的陣列中的字元數。
4.append和replace函式
string類定義了兩個額外的成員函式:append和replace,這兩個函式可以改變string的內容。

修改string的操作
s.insert(pos,args) 在pos之前插入args指定的字元。pos可以是一個下標或者一個迭代器。接收下標版 返回指向s的引用,而接收迭代器版本返回第一個插入字元 的迭代器
s.erase(pos,len) 刪除從位置pos開始的len個字元。如果len被省略,則刪除從pos開始直至s末尾的所有字元。返回一個指向s的引用
s.assign(args) 將s中的字串替換為args。返回一個指向s的引用
s.append(args) 將args追加到s。返回一個指向s的引用
s.replace(range,args) 刪除s中範圍range內的字元,替換為args指定的字元。range或者是一個下標和一個長度,或者是一對指向s的迭代器,返回指向s的引用

5.string搜尋操作
搜尋操作返回指定字元出現的下標,如果未找到則返回npos

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必須是以下的形式之一
c,pos 從s中位置pos開始查詢字元c,pos預設為0
s2,pos 從s中位置pos開始查詢字串s2。pos預設為0
cp,pos 從s中位置pos開始查詢指標cp指向的以空字元結尾的c風格字串
cp,pos,n 從s中位置pos開始查詢指標cp指向的陣列的前n個字元。pos和n無預設值

6.compare函式

s.compare的幾種引數形式
s2 比較s和s2
pos1,n1,s2 將s中從pos1開始的n1個字元與s2進行比較
pos1,n1,s2,pos2,n2 將s中從pos1開始的n1個字元與s2中從pos2開始的n2個字元進行比較
cp 比較s與cp指向的以空字元結尾的字元陣列
pos1,n1,cp 將s中以pos1開始的n1個字元與cp指向的空字元結尾的c風格字元陣列進行比較
pos1,n1,cp,n2 將s中從pos1開始的n1個字元與指標cp指向的地址開始的n2個字元進行比較