c++中string類的幾個常用的函式
1、operator+=
string類的字串可以直接通過加法進行拼接;
程式碼示例
#include <iostream>
#include <string>
#include<algorithm>
#include<bits/stdc++.h>
#include<stack>
#include<set>
#include <vector>
#include <map>
#include<queue>
using namespace std;
int main() {
string s="hello ";
string s1="world";
cout<<s+s1;
return 0;
}
2、compar(>=,==,<=,>,<)
string可以使用比較符號進行對比,比較規則是字典序
程式碼示例
#include <iostream>
#include <string>
#include<algorithm>
#include<bits/stdc++.h>
#include<stack>
#include<set>
#include <vector>
#include <map>
#include<queue>
using namespace std;
int main() {
string s="abc";
string s1="abcd";
if(s<s1) cout<<"s";
return 0;
}
3、length/size
這兩個在string是一個意思,都是返回字串的長度;
程式碼示例
#include <iostream>
#include <string>
#include<algorithm>
#include<bits/stdc++.h>
#include<stack>
#include<set>
#include <vector>
#include <map>
#include<queue>
using namespace std;
int main() {
string s="abc";
string s1="abcd";
cout<<s.size();
cout<<endl<<s1.length();
return 0;
}
4、insert
string的插入函式有多種寫法,以下是常見的兩個
①insert(pos,string)意思是在pos的位置插入string
程式碼示例
#include <iostream>
#include <string>
#include<algorithm>
#include<bits/stdc++.h>
#include<stack>
#include<set>
#include <vector>
#include <map>
#include<queue>
using namespace std;
int main() {
string s="abc";
string s1="abcd";
s.insert(2,s1);//在第二個位置上插入s1,位置是從零開始的
cout<<s;
return 0;
}
②insert(it,it2,it3)it為原字串要插入的位置,it2和it3是要插入的字串的首位迭代器表示[it2,it3)的元素插入it的位置上
程式碼示例:
#include <iostream>
#include <string>
#include<algorithm>
#include<bits/stdc++.h>
#include<stack>
#include<set>
#include <vector>
#include <map>
#include<queue>
using namespace std;
int main() {
string s="abcefgh";
string s1="xxxxx";
s.insert(s.begin()+1,s1.begin(),s1.end());
cout<<s;
return 0;
}
5、erase
同理,erase也有常見的兩種用法
①刪除單個元素,s.erase(it)刪除迭代器it所在位置的字元;
程式碼示例:
#include <iostream>
#include <string>
#include<algorithm>
#include<bits/stdc++.h>
#include<stack>
#include<set>
#include <vector>
#include <map>
#include<queue>
using namespace std;
int main() {
string s="abcefgh";
s.erase(s.begin()+3);
cout<<s;
return 0;
}
②erase(it1,it2)
刪除[it1,it2)這個區間的元素**(注意是左閉右開)**
程式碼示例:
#include <iostream>
#include <string>
#include<algorithm>
#include<bits/stdc++.h>
#include<stack>
#include<set>
#include <vector>
#include <map>
#include<queue>
using namespace std;
int main() {
string s="abcefghij";
s.erase(s.begin()+3,s.begin()+6);//h是第六個位置,但是是開區間,不能刪除
cout<<s;
return 0;
}
6、substr
擷取substr(pos,len)擷取從pos開始的長度為len’的字元
程式碼如下:
#include <iostream>
#include <string>
#include<algorithm>
#include<bits/stdc++.h>
#include<stack>
#include<set>
#include <vector>
#include <map>
#include<queue>
using namespace std;
int main() {
string s="abcefghij";
string s1=s.substr(0,4);//注意是從第0個位置上長度為4的字元,數長度的時候應該從1開始
cout<<s1;
return 0;
}
7、find
①s.find(s1),在s中尋找子串s1,如果找到了,返回s1第一次出現的位置,如果沒找到,返回-1或者s.npos()
程式碼如下:
#include <iostream>
#include <string>
#include<algorithm>
#include<bits/stdc++.h>
#include<stack>
#include<set>
#include <vector>
#include <map>
#include<queue>
using namespace std;
int main() {
string s="abcefghij";
int pos=s.find("be");
int pos1=s.find("ce");
cout<<pos<<endl<<pos1;
return 0;
}
②find(s1,pos)
從pos尾開始查詢s1,返回值一樣;
程式碼示例;
#include <iostream>
#include <string>
#include<algorithm>
#include<bits/stdc++.h>
#include<stack>
#include<set>
#include <vector>
#include <map>
#include<queue>
using namespace std;
int main() {
string s="abcefghijce";
int pos=s.find("ce");
int pos1=s.find("ce",pos);//這裡pos1還是等於2,因為pos的值是2,相當於從第二位開始找,一下就找到了,所以值不變
int pos2=s.find("ce",pos+1);//這裡pos2就是9了,因為是從pos+1,也就是第三位開始找
cout<<pos<<endl<<pos1<<endl<<pos2;
return 0;
}
一個很實用的在一個字串多次查詢的方法:
程式碼示例;
#include <iostream>
#include <string>
#include<algorithm>
#include<bits/stdc++.h>
#include<stack>
#include<set>
#include <vector>
#include <map>
#include<queue>
using namespace std;
int main() {
string s="abcdttefghtt";
for(int beg=0;;beg++){//這個迴圈一定要會
beg=s.find("tt",beg);
if(beg==-1) break;
cout<<beg<<endl;
}
return 0;
}
每次查詢到就輸出,由於for迴圈的加1,第二次查詢是從第一次查到的位置的下一個位置開始查詢,很nice;
8、replace()
①replace(pos,len,s)意思是從位置pos開始的長度為len的子串替換為s
程式碼如下:
#include <iostream>
#include <string>
#include<algorithm>
#include<bits/stdc++.h>
#include<stack>
#include<set>
#include <vector>
#include <map>
#include<queue>
using namespace std;
int main() {
string s="abcdttefghtt";
int pos=s.find("tt");//pos等於4
s.replace(pos,2,"pppp");//從第四位開始的長度為2的子串替換為pppp
cout<<s;
return 0;
}
注:len的長度一般與需要替換的長度一致,否則會發生原字串被覆蓋的情況
比如如果上述將2換為4,那麼原字串的e和f將被覆蓋,輸出的結果就是
②replace(it1,it2,s1)把s中迭代器在[it1,it2)的範圍的子串替換為s1
程式碼示例:
#include <iostream>
#include <string>
#include<algorithm>
#include<bits/stdc++.h>
#include<stack>
#include<set>
#include <vector>
#include <map>
#include<queue>
using namespace std;
int main() {
string s="abcdttefghtt";
string s1="pppp";
s.replace(s.begin(),s.begin()+3,s1);
cout<<s;
return 0;
}
將abc(不包含d,開區間)替換為pppp
如果你覺得有幫助,請給個贊!