find()函数

10 篇文章 2 订阅
泛型算法的 find:非string类型的容器里,可以直接找出所对应的元素.
find函数需要几个参数:迭代器,下标值,所要找的元素
vector<int> a; 
find(a.begin(),a.end(),1);
这句话就表示从a的头开始一直到尾,找到第一个值为1的元素,返回的是一个指向该元素的迭代器。
find在string容器中用途比较广:
find_first_of,    find_last_of,    find_not_first_of,    find_not_last_of    等等
在string类型中,需要的参数也有迭代器,下标和要找的字符串,这里要注意,是字符串,不能查找单个字符。
string a;
find(a.begin(),a.end(),"asd")
这句话就是说,在a中找到第一个存在子串与"asd"子串相等的字符串的首地址。返回指向该字符串首地址的迭代器。
find_last_of则是找到最后一个,
find_not_first_of是找出第一个不与“asd”相等的字符串的首地址


举例说明:
#include <string>
#include <iostream>
using namespace std; 
void 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" + flag;  }
代码如下:
//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; }
说明: 1.如果string sub = ”abc“;
string s = ”cdeabcigld“;
s.find(sub) , s.rfind(sub) 这两个函数,如果完全匹配,才返回匹配的索引,即:当s中含有abc三个连续的字母时,才返回当前索引。
2.如果没有查询到,则返回string::npos,这是一个很大的数,其值不需要知道。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值