1. 程式人生 > 其它 >c++中string類的幾個常用的函式

c++中string類的幾個常用的函式

技術標籤:c++程式碼stringSTL演算法c++stl

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
在這裡插入圖片描述

如果你覺得有幫助,請給個贊!