Li Huaは大学に行きましたか?(私)

タイトル説明
Xiaoboはすでに高校を卒業していますが、大学入試シーズン中の大学入試の展開に思わず注意を払っています。また、2020年の大学入試で今年の旧友であることを知るのは初めてです。試験英語の論文がありません:LiHua。Xiaoboはため息をつくのを助けることができませんでした:Qingjieは終わりました!
次に、大文字と小文字、記号、スペースなどを含む長い文字列sを指定し、「Li Huaは大学に行きましたか」という文字列が含まれているかどうかを確認します(引用符
は含みません)。含まれている場合は、「はい」と出力します、それ以外の場合は「いいえ」を出力します(引用符は含みません)。データのtグループを表す整数tを最初の行に
入力
します。
次のt行では、各行に文字列sがあり、大文字と小文字、記号、スペースなどが含まれ、長さは1e5未満です。
出力
出力t行。各行に「DidLiHua go touniversity」(引用符なし)が含まれている場合は「Yes」を出力し、そうでない場合は「No」(引用符なし)を出力します。
サンプル入力
2を
李華は、大学、暁波?に行きました
あなたは大学に行きました、暁波?
サンプル出力
はい
ません

この質問を始めたとき、私は暴力的な判断を下しましたが、それは私たちがプログラムをタイプするのに時間の無駄でした。それはお勧めできません。

#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;
        }
    }
}

より良い方法があります:
分析:文字列の検索機能を直接使用します

#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;
}

検索関数の説明:
s.find(str、M)は、添え字Mから開始してstrを検索する文字列を表します。Mが指定されていない場合、つまりfind(str)の場合、検索は添え字0から開始されます。デフォルトでは、見つかった場合は開始添え字を返します(文字列の全長よりも短くする必要があります、これはこの質問のアイデアです)、見つからない場合はnposを返します、この値は非常に大きいため、説明する必要はありませんあまりにも多く、それが見つからないかどうかを知る必要があります。その場合、戻り値は文字列の長さよりも大きくなければなりません。

おすすめ

転載: blog.csdn.net/m0_52380556/article/details/115314083