李华上大学了吗?(I)

题目描述
小波虽然早已高中毕业了,但是每逢高考季都会不由自主地关注高考动态,也是第一时间知道了2020高考英语卷中的不见了当年的老朋友:李华。小波不禁感叹到:青结了!
现给出一个长字符串s,其中包括大小写字母,符号,空格等,问其中是否包含字符串"Did Li Hua go to university"(不含引号)
如果包含则输出"Yes",否则输出"No"(不含引号)。
输入
第一行一个整数t,代表t组数据。
接下来t行,每行一字符串s,其中包括大小写字母,符号,空格等,长度小于1e5 。
输出
输出t行,每行如果字符串中包含"Did Li Hua go to university"(不含引号),则输出"Yes",否则输出"No"(不含引号)。
样例输入
2
Did Li Hua go to university,Xiaobo?
Did you go to university,Xiaobo?
样例输出
Yes
No

本人开始做这题的时候用的是暴力的if判断,比较浪费我们敲程序的时间,并不建议

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define ll long long
#define N 150
using namespace std;
int main()
{
    
    
    int t,flag;
    char s[100000];
    cin>>t;
    for(int j=0;j<=t;j++)
    {
    
    
        gets(s);
        flag=0;
        for(int i=0;s[i]!='\0';i++)
        {
    
    
            if(s[i]=='D'&&s[i+1]=='i'&&s[i+2]=='d')
            {
    
    
                if(flag==0&&s[i]=='D'&&s[i+1]=='i'&&s[i+2]=='d'&&s[i+3]==' '&&s[i+4]=='L'&&s[i+5]=='i'&&s[i+6]==' '&&s[i+7]=='H'&&s[i+8]=='u'&&s[i+9]=='a'&&s[i+10]==' '&&s[i+11]=='g'&&s[i+12]=='o'&&s[i+13]==' '&&s[i+14]=='t'&&s[i+15]=='o'&&s[i+16]==' '&&s[i+17]=='u'&&s[i+18]=='n'&&s[i+19]=='i'&&s[i+20]=='v'&&s[i+21]=='e'&&s[i+22]=='r'&&s[i+23]=='s'&&s[i+24]=='i'&&s[i+25]=='t'&&s[i+26]=='y')
                {
    
    
                    flag=1;
                    cout<<"Yes"<<endl;
                    i+=25;
                }
            }
            if(flag==0&&s[i+1]=='\0')cout<<"No"<<endl;
        }
    }
}

这里有更好的办法:
分析: 直接用string的find函数即可

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define ll long long
#define N 150
using namespace std;
int main()
{
    
    
    int t;
    string s;
    cin>>t;
    getchar();//注意开一个getchar承接上一条语句的回车
    while(t--)
    {
    
    
        getline(cin,s);//字符串输入函数
        if(s.find("Did Li Hua go to university")<s.size())cout<<"Yes"<<endl;//用find函数进行查找。
        //若找到则会返回一个值,则一定会小于整个字符串的长度。
        //反之返回的值一定会远远大于字符串长度
        else cout<<"No"<<endl;
    }
    return 0;
}

对find函数的说明:
s.find(str,M)代表从下标为M开始查找为str的字符串,若不加以说明M,即find(str),则默认从下标为0开始查找,如果查找到则返回开始的下标(其一定小于总字符串长度,本题思想就是如此),如果未找到则返回一个npos,这个值很大,无需做过多说明,只需要知道如果找不到,那么返回的值一定大于一个字符串的长度。

猜你喜欢

转载自blog.csdn.net/m0_52380556/article/details/115314083