(去膜拜大佬的博客园,结果被自己菜到自闭)
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 " ,position); 9 } 10 else 11 { 12 printf("Not found the flag "); 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 ",position); 4 position = s.find_last_of(flag); 5 printf("s.find_last_of(flag) is :%d ",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 ",position);
这个地方有个内容,就是当s.find 与s,rfind寻找的地址不一致时,说明不止出现了一次.
(所以有些题询问是否出现了一次时可以用)
感谢大佬的博客园对本小白的帮助.
部分代码参考来自
https://www.cnblogs.com/wkfvawl/p/9429128.html
此处应有掌声.
虽然菜到了自闭,但是还是要继续往下走,去面对新的挑战.