¿Li Hua fue a la universidad? (I)

Descripción del título
Aunque Xiaobo ya se graduó de la escuela secundaria, involuntariamente presta atención al desarrollo del examen de ingreso a la universidad durante la temporada de exámenes de ingreso a la universidad. También es la primera vez que se sabe que el viejo amigo del año en el ingreso a la universidad de 2020 Falta el examen de inglés: Li Hua. Xiaobo no pudo evitar suspirar: ¡Qingjie se acabó!
Ahora escriba una cadena larga s, que incluya letras mayúsculas y minúsculas, símbolos, espacios, etc., y pregunte si contiene la cadena "¿Li Hua fue a la universidad" (sin comillas).
Si contiene, escriba "Sí" , de lo contrario, muestre "No" (sin comillas).
Ingrese
un número entero t en la primera línea, que represente t grupos de datos.
En la siguiente línea t, cada línea tiene una cadena s, que incluye letras mayúsculas y minúsculas, símbolos, espacios, etc., y la longitud es menor que 1e5.
Salida
Salida t líneas, si cada línea contiene "¿Fue Li Hua a la universidad" (sin comillas), entonces salida "Sí", en caso contrario, "No" (sin comillas).
Entrada de muestra
2
¿Li Hua fue a la universidad, Xiaobo?
¿Fuiste a la universidad, Xiaobo?
Salida de muestra

No

Cuando comencé a hacer esta pregunta, utilicé un juicio violento si, lo cual fue una pérdida de tiempo para que escribiéramos el programa. No se recomienda

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

Hay una mejor manera:
Análisis : use la función de búsqueda de la cadena directamente

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

La descripción de la función de búsqueda:
s.find (str, M) representa la cadena que comienza desde el subíndice M para buscar str. Si no se especifica M, es decir, find (str), la búsqueda comienza desde el subíndice 0 por defecto. Si lo encuentra, devuelva el subíndice inicial (debe ser menor que la longitud total de la cadena, esta es la idea de esta pregunta), si no lo encuentra, devuelva un npos, este valor es muy grande, no es necesario explicar demasiado, solo necesito saber si no se puede encontrar, entonces el valor devuelto debe ser mayor que la longitud de una cadena.

Supongo que te gusta

Origin blog.csdn.net/m0_52380556/article/details/115314083
Recomendado
Clasificación