string find()函式、string::npos的含義、erase()函式
阿新 • • 發佈:2018-11-25
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
}