C++中string类型的find 函数

(去膜拜大佬的博客园,结果被自己菜到自闭)

find

string中find()返回值是字母在母串中的位置(下标记录),如果没有找到,那么会返回一个特别的标记npos。

对其返回的下标position的定义:

 string::size_type position;
前面那一块是一个类型,不要管他(我是小白)
 1  string s("1a2b3c4d5e6f7jkg8h9i1a2b3c4d5e6f7g8ha9i");
 2      string flag;
 3      string::size_type position;
 4      //find 函数 返回jk 在s 中的下标位置
 5      position = s.find("jk");
 6      if (position != s.npos)  //如果没找到,返回一个特别的标志c++中用npos表示,要记住,这是一个很大的数,不是零
 7      {
 8          printf("position is : %d\n" ,position);
 9      }
10      else
11      {
12          printf("Not found the flag\n");
13      }

再来一组

s.find_first_of(flag):从头找flag 的位置

s.find_last_of(flag):倒着找flag的位置

find("b",5):从第五位往后找b所在的位置

 

 


1   flag = "c";
2       position = s.find_first_of(flag);
3       printf("s.find_first_of(flag) is :%d\n",position);
4       position = s.find_last_of(flag);
5       printf("s.find_last_of(flag) is :%d\n",position);
6       position=s.find("b",5);
7     cout<<"s.find(b,5) is : "<<position<<endl;
8     //查找s 中flag 出现的所有位置。

还有一个更高级的,

寻找所有的flag

find(flag,position)!=string::npos

1  flag="a";
2     position=0;
3     int i=1;
4     while((position=s.find(flag,position))!=string::npos)
5     {
6         cout<<"position  "<<i<<" : "<<position<<endl;
7         position++;
8         i++;
9     }

也可以进行反向查找

s.rfind()

1 flag="3";
2      position=s.rfind (flag);
3      printf("s.rfind (flag) :%d\n",position);

这个地方有个内容,就是当s.find 与s,rfind寻找的地址不一致时,说明不止出现了一次.

(所以有些题询问是否出现了一次时可以用)


感谢大佬的博客园对本小白的帮助.
部分代码参考来自
https://www.cnblogs.com/wkfvawl/p/9429128.html
此处应有掌声.
虽然菜到了自闭,但是还是要继续往下走,去面对新的挑战.


posted @ 2020-02-18 16:50  安之若醇  阅读(749)  评论(0编辑  收藏  举报
Live2D服务支持