C++字符串常見操作函數最全總結!!

在做題過程中經常用到字符串,有時候費了很大力氣去寫一個函數,結果最後發現C++已經封裝好了此類函數。。。所以花點時間總結一下,這裏參考了:http://www.cplusplus.com/reference/

1、構造函數:
string str:空串,string s(str)複製str到s,string s(num,c)生成由num個c字符構成的字符串。

2、插入函數:
有兩種push_back()和insert(),後者比較常用。
push_back():尾部插入一個字符,例如s.push_back(‘p’);
insert():例如s=“abcddss”,執行s.insert(s.begin(),‘i’)後在位置0前插入’i’變成"iabcddss"。

3、遍歷:
藉助迭代器或者下標,下標比較常用。迭代器分兩種:正向和反向。
正向:string::iterator it=s.begin();it!=s.end();it++;
反向:string::reverse_iterator it=s.rebegin();it!=s.rend();it++;
其中*it表示該位置的字符。下標與字符數組一樣,不再贅述。

4、查找:
1)、查找一個字符串:s.find(ss),找到返回ss在s中的起始位置,否則返回-1;
2)、從某一個位置開始查找某個字符:s.find(‘t’,6),從s的位置6開始查找字符’t’,找到則返回位置,否則返回-1;注意1)和2)都是返回第一次找到的位置;
3)、從末尾開始查找某個字符:s.rfind(‘t’);
4)、從某個位置開始查找第一個不屬於s1的字符位置,例如s=“cdcdscds”,s1=“cdcdfff”,s.find_first_not_of(s1)=4,s的位置4字符不屬於s1,類似的還有查找第一個屬於s1的字符的位置,去掉not就好。

5、排序:
sort(s.bgein(),s.end());

6、分割截取:
有兩個函數:substr()與strtok()。
s.substr(2,5)爲s從2位置開始的5個字符組成的子串。
strtok()函數原型:char *strtok(char *s,const char *delim)
函數功能:分解字符串爲一組字符串,s爲要分解的字符串,delim爲分隔字符串。

const char *split=",;!";
char *p=strtok(str,split); 
 while(p!=NULL) {   
    cout<<p<<'\n';   
    p=strtok(NULL," ");   
 } 
//按照分隔符",:!"來分割字符串str  
 return 0;   

7、刪除:
erase()函數,例如s=“12345678”,s.erase(s.begin()+3)後變爲"1235678",即把位置3的字符刪掉。

8、替換:
repalce()函數:s.replace(pos,len,ss),將s從pos開始的len個字符替換成ss,
s.replace(pos,n1,n2,c),將s從pos開始的n1個字符替換成n2個字符c

9、大小寫轉換:
tolower()和toupper()。循環遍歷字符串的每一個位置s[i]=tolower(s[i]),大寫轉小寫,或者s[i]=toupper(s[i]),小寫轉大寫。
這裏其實推薦用STL中的transform()函數,具體用法如下:
transform(s.begin(),s.end(),::tolower)大寫轉小寫,小寫轉大寫類似。

10、比較函數:
string支持<,>,<=, >=, ==, != 等操作。
compare()函數專門用做string的比較函數,s.compare(ss)=0說明ss == s,返回1表明s>ss,返回-1表明s<ss。

11、拼接函數:
c++的string支持直接相加,“cdd”+“sss”=“cddsss”。另外s.append(ss)表示在s最後加上ss,等同於s+=ss。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章