學(xué)習(xí)C++ -> string類字符串
一,、string類字符串的介紹
在程序設(shè)計中, 字符串的使用十分頻繁, C語言類型字符串(簡稱C-串)在使用與字符串的處理上較為復(fù)雜, C++為了在程序設(shè)計中更加方便的使用字符串特新增了一種string類型的字符串,。
string類字符串為STL(Standard Template Library, 標準模板庫)中的一種自定義的數(shù)據(jù)類型, 相對于C-串來說string類型串具有一些明顯的優(yōu)勢, 首先, 它在內(nèi)存使用上是自動的, 需要多少, 開辟多少, 并且能夠根據(jù)字符串大小的變化自動調(diào)整所開辟的內(nèi)存; 此外, string串還提供了大量的方法以便更好的完成對字符串的各種操作。
二,、聲明一個string型字符串
同普通變量一樣, string類型的字符串在使用前也需進行聲明, 并且也可以對其進行相關(guān)的初始化操作, 相關(guān)的聲明以及初始化方法如下:
string s; //聲明一個string型字符串s
string s(const string &str); //聲明string型字符串s并用另一個string型字符串str對其進行初始化
string s(const string &str, size_type n); //將字符串str中起始位置n后的字符串作為字符串s的初始值
string s(const string &str, size_type n, size_type m); //將字符串str位置n起, 長為m的部分的字符作為字符串s的初始值
string s(const char *cs) ; //將C-串cs作為string串s的初始值
string s(const char *cs, size_type n); //將C-串cs的前n個字符作為string串s的初始值
string s(const char *cs, size_type n, size_type m); //將C-串cs中位置n起, 長為m的部分的字符作為字符串s的初始值
string s(size_type num, char c); //初始化字符串值為num個c字符
string s(iterator begin, iterator end); //將區(qū)間[begin, end]內(nèi)的字符作為字符串s的初始值
示例:
1 #include<iostream> 2 3 using namespace std ; 4 5 int main() 6 { 7 char cs[] = "hello,world" ; //聲明并初始化一個C-串 8 string str ; //聲明一個string串 9 str = "hello,world" ; //對string串進行賦值 10 cout<<str<<endl ; 11 12 //使用string類型初始化另一個string類型 13 string s1(str) ; cout<<s1<<endl ; 14 string s2(str, 2) ; cout<<s2<<endl ; 15 string s3(str, 2, 5) ; cout<<s3<<endl ; 16 17 //使用C-串初始化string類型串 18 string s4(cs) ; cout<<s4<<endl ; 19 string s5(cs, 2) ; cout<<s5<<endl ; 20 string s6(cs, 2, 5) ; cout<<s6<<endl ; 21 22 return 0 ; 23 }
三,、字符串的輸入輸出
除了已經(jīng)學(xué)習(xí)的 ">>"、"cin.get()"和"cin.getline()"對字符串進進行輸入外, string頭文件中還定義了getline()函數(shù)用于輸入string字符串,。
getline的函數(shù)原型如下:
istream& getline ( istream &is , string &str , char delim ); //形式一 istream& getline ( istream& , string& ); //形式二
getline的第一個函數(shù)參數(shù)為輸入流對象; 第二個為待輸入的字符串; 第三個是可選參數(shù), 為自定義的終止符, 當(dāng)輸入到該字符時表示輸入完成, 程序只保存終止符前的輸入內(nèi)容, 當(dāng)省略時默認以'\n'為終止符,。需要說明的是, 終止符不會保存到輸入的字符串中去。
示例:
1 #include<iostream> 2 3 using namespace std ; 4 5 int main() 6 { 7 string s; 8 getline(cin, s) ; //使用默認的'\n'作為終止符 9 cout<<s<<endl ; 10 11 getline(cin, s, '!') ; //以'!'作為終止符 12 cout<<s<<endl; 13 14 return 0 ; 15 }
輸出:
hello ↙鍵盤輸入 hello hwllo!world! ↙鍵盤輸入 hwllo Process returned 0 (0x0) execution time : 25.375 s Press any key to continue.
四,、string串的基本使用方法
在string類型的字符串中, 字符串的處理得到極大的簡化, 例如原本在C-串中的復(fù)制操作, 需要借助string.h中的strcpy()函數(shù)才能完成, 而在string串中只需一個'='進行賦值就能完成,。更具體的如下:
1>. 復(fù)制
string s1 = "hello" ; string s2 = s1 ; //復(fù)制
2>. 連接
string s1 = "hello" ; string s2 = "world" ; s1 += s2 ; //連接
3>. 比較
string s1 = "hello" ; string s2 = "world" ; if(s1 < s2) cout<<"s1 < s2" ; //比較
4>. 倒置串
string s = "hello" ; reverse(s.begin(), s.end()) ; //需要包含algorithm頭文件, #include<algorithm>
5>. 查找串
string s = "hello" ; cout<<s.find("ll") ; //返回子串第一次出現(xiàn)的位置
6>. 替換
string s = "hello" ; s.replace(0, 2, "aaa") ; //將字符串s中下標0-2部分字符串替換為"aaa"
五、string的更多方法
由于string類型的字符串自身提供的方法太多, 這里不能一一詳述, 只選擇一些常用的來進一步說明,。
1>. 獲取字符串狀態(tài)
s.size() //返回字符串大小
s.length() //返回字符串長度
s.max_size() //返回字符串最大長度
s.clear() //清空字符串
s.empty() //判斷字符串是否為空
2>. 修改字符串
①. append - 追加 string s = "hello" ; s.append("world") ; //將"world"追加到s中 ②. push_back - 追加字符到字符串 string s = "hello" ; s.push_back('!') ; //將'!'追加字符到字符串s中 ③. insert - 插入 string s = "hello" ; s.insert(2, "www") ; //將字符串"www"插入到字符串s中, 插入位置為2 ④. erase - 從字符串中擦除一些字符 string s = "hello" ; s.erase(1, 2) ; //從下標為1處向后擦去2個字符 ⑤. swap - 與另一字符串交換內(nèi)容 string s1 = "hello" ; string s2 = "world" ; s1.swap(s2) ; //將s1與s2中的字符串進行交換
等等,。
另外值得一提的是, 這些函數(shù)并不是只有這一種用法, 根據(jù)傳入?yún)?shù)不同其產(chǎn)生的效果也不同, 具體的原因隨著學(xué)習(xí)的不斷深入自然會揭曉。
--------------------
wid, 2013.01.21