题目:
编程实现: 输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入一个字符,再输入一个以回车结束的字符串(少于80个字符),在字符串中查找该字符,如果找到,输出该字符在字符串中所对应的最大下标 (下标从0开始);否则输出"Not Found"。输出格式为"index = %d\n"
输入输出示例:括号内为说明
输入样例:
2 (repeat=2)
m (字符'm')
programming (字符串"programming")
a (字符'a')
1234 (字符串"1234")
输出样例:
index = 7 ('m'在"programming"中对应的最大下标是7)
Not Found ("1234"中没有'a')
内心BB:
出题老师啊,麻烦您就不可以把 () 换成 // 吗?
你让我这种直接复制粘贴测试样例的懒人很为难啊!!!!
代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int repeat;
cin>>repeat;
char target;
string str;
for(int i=0;i<repeat;i++)
{
cin>>target;
cin>>str;
int pos = str.find_last_of(target);
//逆向查找,返回字符串中第一个是指定字符串中任意字符的下标.
if (pos == str.npos)//如果没有就返回s.npos,s.npos是一个常数,用以作为find函数为查询到时的匹配值
{
cout << "Not Found" << endl;
}
else cout<<"index = "<<pos<<endl;
}
}
时间复杂度O(n),是目前最快的版本了hhh(快乐.jpg)
坑:
Not Found 后面没有空格!!如果是格式错误的话就是这个原因了!!这个bug卡了我很久!!!
和我一样懒的就直接复制我下面的吧
Not Found
btw,这题对换行没有设置。
感想:
stl是永远滴神!!自从会了stl后,做作业速度打打提高,有更多时间玩耍了!!!
笔记:
关于stl中串的总结:
find()函数:
功能:返回从指定位置,顺序查找第一次出现指定字符串的下标.。
还可以写作str.find(s,p) 从p开始查找s字符串。
如果没有,则返回str.npos。str.nps就是最后一个字符的下一个字符的位置。输出就是-1。
同样find函数的衍生函数还有
find_first_not_of :返回从指定位置,顺序查找第一个不是指定字符串的下标.
find_first_of :返回字符串中第一个含有指定字符串中字符的下标.
find_last_not_of :逆向查找,返回字符串中第一个不是指定字符串中任意字符的下标.
find_last_of :逆向查找,返回字符串中第一个是指定字符串中任意字符的下标