在C++的编程题中,有许多要用到“查找”的步骤,但传统的二分查找较为复杂而且还不能查找字符而且还需要先排序完,这就有一定的局限性,但有时候又需要查找字符,这就需要用到find函数了
一.格式:
要查找的字符串名称.find_first_of("要查找的字符");
这条指令意为查找某个字符串中符合你要查找的字符的位置(如果有多个和你要查找的字符相同的字符将返回第一个的位置)
另一种写法:
要查找的字符串名称.find_last_of("要查找的字符");
这条指令意为查找某个字符串中符合你要查找的字符的位置(如果有多个和你要查找的字符相同的字符将返回最后一个的位置)
PS:如果查找不到,默认会返回0,要加<bits/stdc++.h>万能头文件
二.查找例子
1.查找字符串s中的“a”第一个和最后一个出现的位置
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;//定义字符串
cin>>s;//输入字符串
int bt2 =s.find_first_of("a");
bt2 += 1;//这样就可以显示它真实的位置了,因为字符串默认从0开始
cout<<bt2<<endl;
//以上即为从头至尾找第一个符合元素
int bt3 =s.find_last_of("a");
bt3 += 1;
cout<<bt3<<endl;
//以上即为从头至尾找最后一个符合元素
return 0;
}
2.在字符串中查找字符n第一个和最后一个出现的位置
#include<bits/stdc++.h>
using namespace std;
int main(){
string s,n;
//要多定义一个字符型变量
cin>>s>>n;
//输入要查找的字符n
int bt2 =s.find_first_of(n);
//改"a"为我们自己输入的n
bt2 += 1;
cout<<bt2<<endl;
int bt3 =s.find_last_of(n);
//改"a"为我们自己输入的n
bt3 += 1;
cout<<bt3<<endl;
return 0;
}
3.判断一个字符串中有没有字符n
#include<bits/stdc++.h>
using namespace std;
bool cod(string s, string n){
int bt2 =s.find_first_of(n);
//这里写find_first_of和find_last_of其实没差
//因为有就是有,不用考虑顺序
bt2 += 1;
if(bt2 == 0)return false;
//既然已经吧bt2加了1,如果查找到,就绝对不是0
else return true;
//不是0,就说明查找到了
}
int main(){
string s,n;
cin>>s>>n;
if(cod(s, n))cout<<"YES"<<endl;
//进行判断
else cout<<"NO"<<endl;
return 0;
}
可以发现,直接用find查找比什么二叉查找树、二分查找不知道好写多少倍~~
而且效率也高,不用背模板
所以自从我知道了这个函数,就再也没背过查找模板