C++中string常用函數用法總結


string(s小寫)是C++標准庫中的類,純C中沒有,使用時需要包含頭文#include<string>,注意不是<string.h>,下面記錄一下string中比較常用的用法。

 

string的定義及初始化

string s1 = "hello"; //初始化字符串
string s2 ("world"); //另一種初始化 
string s3;   //初始化字符串,空字符串
string s4(5, 'a'); //s4由連續5個a組成,即s4="aaaaa";
string s5(s1,2,3); //從s1的2位置的字符開始,連續3個字符賦值給s5,即s5="llo";
string s6(s1, 1); //從s1的2位置的字符開始,將后續的所有字符賦值給s6,即s6="ello"; 

string的讀入

當使用C++的cin讀入字符串時,程序遇到空白字符就停止讀取了。比如程序輸入是:

"    hello   world"

那么當我們使用如下代碼時,s1得到的只是"hello"。

string s1;
cin>>s1;

如果我們想讀取一整行輸入,包括空格及空格后面的字符,我們可以使用getline。

string str;
getline(cin, str);
cout << str << endl;

 

重載的運算符

此處列舉一下被重載的運算符,基本意思一目了然。其中注意“+”操作

    s1 = s2;
    s1 += s2;
    s1 = s2 + s3;
    s1 == s2;
    s1 = "s" + s2; //正確
    s1 = "s" + "s"; //錯誤,加號兩邊至少要有一個string類型的對象
    s1 = "s" + s2 + "s" + "s"; //正確

“+”的兩邊要保證至少有一個string類型,所以5正確,6錯誤。由於在C/C++中,+的返回值還是原類型,所以第7行中,"s"+s2返回一個string類型,因此string+“s”也是正確的,以此類推。

 

遍歷string(迭代器)

遍歷string中的元素時,我們可以使用類似C中的數組形式訪問,如s1[1],也可以使用STL特有的迭代器訪問:

string::iterator it;
for (it = s1.begin(); it != s1.end(); it++){
    cout << *it << endl;
}

cout << *(s1.begin()); //正確,即訪問s1[0]
cout << *(s1.end()); //錯誤,s1.end()指向了空

 若想要從后向前遍歷string時,可以用到rbegin()和rend()函數。

const_iterator begin()const;
iterator begin();                //返回string的起始位置
const_iterator end()const;
iterator end();                    //返回string的最后一個字符后面的位置
const_iterator rbegin()const;
iterator rbegin();                //返回string的最后一個字符的位置
const_iterator rend()const;
iterator rend();                    //返回string第一個字符位置的前面

插入insert()

string s1 = "hello";
s1.insert(1,"ins"); //從s1的1位置開始,插入"ins"字符串,即s1="hinsello";
s1.insert(1, "ins", 2);//從s1的1位置開始,插入"ins"字符串的前2個字符,即s1="hinello";
s1.insert(1, "ins", 1, 2);//從s1的1位置開始,插入"ins"字符串的從1位置開始的2個字符,即s1="hnsello";
iterator insert(iterator it, char c);//在it處插入字符c,返回插入后迭代器的位置

刪除erase()

iterator erase(iterator first, iterator last);//刪除[first,last)之間的所有字符,返回刪除后迭代器的位置
iterator erase(iterator it);//刪除it指向的字符,返回刪除后迭代器的位置
string &erase(int pos = 0, int n = npos);//刪除pos開始的n個字符,返回修改后的字符串

查找 find()

cout << s.find("aa", 0) << endl; //返回的是子串位置。第二個參數是查找的起始位置,如果找不到,就返回string::npos
if (s.find("aa1", 0) == string::npos)
{
    cout << "找不到該子串!" << endl;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM