C++ 中string.find() 函数的用法总结

#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;
}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值