#include <string>
#include <iostream>
using namespace std;
int main(){
find函数返回类型 size_type
string s("1a2b3c4d5e6f7g8h9i1a2b3c4d5e6f7g8ha9i");
string flag;
string::size_type position;
//find 函数 返回jk 在s 中的下标位置
position = s.find("jk");
if (position != s.npos) //如果没找到,返回一个特别的标志c++中用npos表示,我这里npos取值是4294967295,{
cout << "position is : " << position << endl;
else
cout << "Not found the flag. and now the position is: " << position <<endl;
//find 函数 返回flag 中任意字符 在s 中第一次出现的下标位置
flag = "c";
position = s.find_first_of(flag);
cout << "s.find_first_of(flag) is : " << position << endl;
//从字符串s 下标5开始,查找字符串b ,返回b 在s 中的下标
position=s.find("b",5);
cout<<"s.find(b,5) is : "<<position<<endl;
//查找s 中flag 出现的所有位置。
flag="a";
position=0;
int i=1;
while((position=s.find_first_of(flag,position))!=string::npos){
//position=s.find_first_of(flag,position);
cout<<"position "<<i<<" : "<<position<<endl;
position++;
i++;
}
//查找flag 中与s 第一个不匹配的位置
flag="acb12389efgxyz789";
position=flag.find_first_not_of (s);
cout<<"flag.find_first_not_of (s) :"<<position<<endl;
//反向查找,flag 在s 中最后出现的位置
flag="3";
position=s.rfind (flag);
cout<<"s.rfind (flag) :"<<position<<endl;
return 0;
}
</pre><pre name="code" class="cpp">最后再说说npos的含义,string::npos的类型是string::size_type,所以,一旦需要把一个索引与npos相比,这个索引值必须是string::size)type类型的,更多的情况下,我们可以直接把函数和npos进行比较 【比如:if(s.find(“Hel”)!= string::npos) 意思是:如果找到了】
<pre name="code" class="cpp">#include <iostream>
#include <string>
using namespace std;
string::size_type position;
int main(){
string s = "Hello World!";
position = s.find("lo");
/***************方式 一*****************************/
if(position != s.npos){ //如果没找到,返回一个特别的标志 C++中用 npos 表示
cout<<"position is: "<<position<<endl;
}
else
cout<<"Not found the flag"<<endl;
/**************方式 二****************************/
if(s.find("lo") != string::npos){ //如果没找到,返回一个特别的标志 C++中用 npos 表示
cout<<"position is: "<<position<<endl;
}
else
cout<<"Not found the flag"<<endl;
/**************方式 三***************************/
if(s.find("lo") != s.npos){ //如果没找到,返回一个特别的标志 C++中用 npos 表示
cout<<"position is: "<<position<<endl;
}
else
cout<<"Not found the flag"<<endl;
return 0;
}
输出结果:
#include <iostream>
#include <string>
using namespace std;
string cmd[10];
int main(){
string s = "ABC;DEF;GHIJK;LMN;";
int position = 0;
int i = 0;
while(1){
int tmposition = position;
position = s.find(";", position); //从下表所以position开始找第一个为";"的索引
if(position == s.npos){
cout<<"NOT FOUND. and now position is: "<<position<<endl;
break;
}
cout<<"position is: "<<position<<endl;
cmd[i++] = s.substr(tmposition,position);
position++;
}
for(int k = 0; k < i; k++)
cout<<cmd[i]<< " ";
cout<<endl;
return 0;
}
position的定义类型: string::size_type position = 0; string::size_type tmposition = 0;
#include <iostream>
#include <string>
using namespace std;
string cmd[10];
int main(){
string s = "ABC;DEF;GHIJK;LMN;";
string::size_type position = 0;
string::size_type tmposition = 0;
int i = 0;
while(1){
tmposition = position;
position = s.find(";", position); //从下表所以position开始找第一个为";"的索引
if(position == s.npos){
cout<<"NOT FOUND. and now position is: "<<position<<endl;
break;
}
cout<<"position is: "<<position<<endl;
cmd[i++] = s.substr(tmposition,position);
position++;
}
for(int k = 0; k < i; k++)
cout<<cmd[i]<< " ";
cout<<endl;
return 0;
}