C++STL中String類的分析與運用

[Mollnn.Fan原創,轉載請註明出處]
本來以爲有了String類,所有的字符串操作都變得非常簡單。然後,在某次實際測試中反應出了很大的問題。原本只涉及到區區一個replace,在有參考資料的狀態下10分鐘輕鬆解決的問題,只因爲忘記了replace函數的原型,導致了問題的複雜化。說實話,對於MFC的CString我或許更加熟悉,但應付競賽需要,現在開始改掉用MFC的習慣。
在那道替換問題中,我沒有采用函數replace,或者說根本沒有采用String類來進行字符串處理。取而代之的是一個自己撰寫的_replace函數,然而在使用這個函數的過程中,也發生了一些問題。因爲對傳入參數的誤操作,導致一個20分鐘輕鬆完成的程序變成了80分鐘的累贅……
然而本篇的重點不在於此,而是要藉此複習一下String類的一些基本用法。
1.構造函數
這裏寫圖片描述
上文揭示了string的三種構造方法,當然還漏了最常用的默認構造。
2.operator[]和at()
同其他stl容器一樣,at帶有下標越界檢查。
3.轉換爲字符串數組
const char *data()const;//返回一個非null終止的c字符數組
const char *c_str()const;//返回一個以null終止的c字符串
4.特性描述
用length獲取字符串的長度。
用empty判斷是否爲空。
5.流輸入
除了通過重載的流操作運算符,還可以通過:
getline(istream &in,string &s);用於從輸入流in中讀取字符串到s中,以換行符’\n’分開。
6.拷貝函數
原型:
將從當前串pos開始的n個字符拷貝到s數組中。
7.賦值
string &assign(const char *s);//用c類型字符串s賦值
string &assign(const string &s,int start,int n);//把字符串s中從start開始的n個字符賦給當前字符串
8.連接
string &append(const string &s,int pos,int n);//把字符串s中從pos開始的n個字符連接到當前字符串的結尾
事實上,+=操作符已經足夠方便。
9.比較
比較是字符串中一個很重要的內容。我們通過一個簡單的案例來了解string類提供的重載運算符的優勢:
這裏寫圖片描述
編譯後,運行結果爲01.若我們將串1改爲9999,則輸出10.
顯見,這是一種極爲方便的比較方式。
事實上,對於限制範圍的比較,我們可以通過compare成員函數的一種重載來實現。
int compare(int pos, int n,const string &s,int pos2,int n2)const;//比較當前字符串從pos開始的n
個字符組成的字符串與s中pos2開始的n2個字符組成的字符串的大小
顯而易見,將自己的pos—n與s的pos2—-n2比較。如果自己大就是1,==就是0,小就是-1.
10.子串提取
子串提取十分方便,只需要通過一個成員函數來完成即可。
string substr(int pos = 0,int n = npos) const;//返回pos開始的n個字符組成的字符串
11.交換
這繼承了STL的通用特點。也就是a.swap(b);
12.查找基礎
在這裏只提及一種查找,
int find(const string &s, int pos = 0) const;//從pos開始查找字符串s在當前串中的位置 //查找成功時返回所在位置,失敗返回string::npos的值
改爲rfind則反着找。
對於本字符串,從pos開始尋找s第一次出現的位置。
同樣,若在後面增補長度參數,就可以限制s的長度。當然,也可以把const char*改爲string。
13.替換基礎
替換函數也是使用頻率很高的一種函數。在某些語言中,比如VISUAL BASIC,自帶的字符串處理函數可以直接將某種字符串替換成另一種。但是在這裏,需要繞個彎。
string &replace(int p0, int n0,const string &s, int pos, int n);//刪除p0開始的n0個字符,然後在p0處入串s中從pos開始的n個字符
這是最基本的定義原型。事實上,在&s後增補pos和nlen就可以對&s的使用範圍進行限制。
這個函數表示將從p0開始的n0個字符刪除後,在這裏插入s,這樣會比自己寫要簡單也快捷的多。
14.查找與替換的綜合
這裏寫圖片描述
這是一個簡單的替換實例,替換的結果爲good morning!
第一句我們採用了原始的替換方法。
同時,我們對這個比較繁瑣的替換代碼進行了宏封裝,因此使用第二句也可以替換。
15.插入與刪除
string &insert(int p0,const string &s, int pos, int n);
string &erase(int pos = 0, int n = npos);

最終,我們來總結歸納一下string類常用參數列表的共同特點。
Func_name([base list], [tar_string], [pos], [num]);

發佈了53 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章