1. 程式人生 > >string find()函式、string::npos的含義、erase()函式

string find()函式、string::npos的含義、erase()函式

 

string::npos引數 —— npos 是一個常數,用來表示不存在的位置

例如,有兩個字串a、b,判斷a字串是否包含b字串

//如果字串不存在包含關係,那麼返回值就一定是npos
if(a.find(b)!=string::npos){
	cout<<"yes"<<endl;
}else{
	cout<<"no"<<endl;
}

string::size_type pos;

str.find("字串") 返回值是字元在母串s中的下標位置;

str.find("字串",9) 從s的下標9開始,查詢字串,返回字串在s中的下標;

pos=s.find(str,pos) 查詢s中str出現的所有位置。

pos=s.find_first_of(str)  返回str出現在母串s中的首次出現的位置

pos=s.find_last_of(str)  返回str出現在母串s中的最後一次出現的位置

#include<iostream>
#include<string>
using namespace std;
int main(){
	string s("abcbcdcd");
	string str="cd";
	string::size_type pos;
	pos=s.find("bc");
	if(pos!=s.npos){
		cout<<pos<<endl;//1
	}else{
		cout<<"no"<<endl;
	}
	pos=s.find("bc",2);
	cout<<"從s下標2開始查詢:"<<pos<<endl;//3 
	int i=1;
	while((pos=s.find(str,pos))!=string::npos){
		cout<<"位置"<<i<<":"<<pos<<endl;//位置1:4  位置2:6 
		pos++;
		i++; 
	}
	cout<<"第一次:"<<s.find_first_of('d')<<endl;//5
	cout<<"最後一次:"<<s.find_last_of('d')<<endl;//7
}

 

erase函式的原型如下:
(1)string& erase ( size_t pos = 0, size_t n = npos );
(2)iterator erase ( iterator position );
(3)iterator erase ( iterator first, iterator last );
也就是說有三種用法:
(1)erase(pos,n); 刪除從pos開始的n個字元,比如erase(0,1)就是刪除第一個字元
(2)erase(position);刪除position處的一個字元(position是個string型別的迭代器)
(3)erase(first,last)

;刪除從first到last之間的字元(first和last都是迭代器)

 

#include<iostream>
#include<string>
using namespace std;
int main(){
	string s("I love zufe.");
	string::iterator it;
	s.erase(1,5);//刪除從1開始的5個字元 
	cout<<s<<endl;//I zufe.
	it=s.begin()+6;
	s.erase(it);//刪除位置為9的字元 
	cout<<s<<endl;//I zufe
	s.erase(s.begin()+3,s.end()-2);//刪除之間的字元 
	cout<<s<<endl;//I zfe
}