Código de núcleo de IA valorado en 100 millones

Las imágenes de arriba son de Sina Weibo.

Esta pregunta requiere que implementes un programa de respuesta a preguntas en inglés de IA un poco más valioso. Las reglas son:

  • No importa lo que diga el usuario, primero imprima lo que dijo la otra parte en una línea;
  • Elimine los espacios redundantes en el texto original: reemplace varios espacios entre palabras adyacentes con un espacio, elimine todos los espacios al principio y al final de la línea y elimine los espacios antes de los signos de puntuación;
  • Cambie todas las letras mayúsculas en inglés del texto original a minúsculas, excepto  I;
  • Reemplace todo independiente en el texto original  con can you, could you correspondientemente  I can——aquí I could"independiente" se refiere a palabras separadas por espacios o signos de puntuación;
  •  Reemplace  todas I las sumas  independientes  en el texto original con ;meyou
  • Reemplace todos los signos de interrogación en el texto original  ? con signos de exclamación  !;
  • Muestra la oración reemplazada en una línea como la respuesta de la IA.

Formato de entrada:

Entrada Primero, se proporciona un número entero positivo N que no exceda 10 en la primera línea, seguido de N líneas, y cada línea proporciona un diálogo del usuario que no exceda los 1000 caracteres y termine con un retorno de carro. El diálogo es una cadena no vacía. , incluidos solo letras, números, espacios, puntuación visible de ancho medio.

Formato de salida:

Salida de acuerdo con los requisitos del título, y se debe agregar un espacio antes de cada respuesta AI  AI: .

Muestra de entrada:

6
Hello ?
 Good to chat   with you
can   you speak Chinese?
Really?
Could you show me 5
What Is this prime? I,don 't know

Salida de muestra:

Hello ?
AI: hello!
 Good to chat   with you
AI: good to chat with you
can   you speak Chinese?
AI: I can speak chinese!
Really?
AI: really!
Could you show me 5
AI: I could show you 5
What Is this prime? I,don 't know
AI: what Is this prime! you,don't know

Ideas:

        Al hacer esta pregunta, debe ser organizado y claro, y completar los requisitos uno por uno, no los mezcle para completarlos, que es fácil causar confusión, y complételos paso a paso.
        1. Eliminar el primer y el último espacio
        2. Eliminar los espacios redundantes entre las palabras y los espacios antes de los símbolos
        3. ¿Convertir todas las letras mayúsculas excepto la I en minúsculas y reemplazar el signo de interrogación? ¡Reemplácelo con un signo de exclamación! ;
        4. Use el algoritmo de doble puntero para escanear y extraer la palabra de la oración, y haga el juicio de I and me and can you and could you.Al hacer el juicio de can you and could you, puede usar una cadena variable para extraer la anterior de antemano Anota las palabras que salen, de manera que siempre que la palabra anterior sea can, could, y la palabra seas tú, puedas determinar cuál de las dos es. En segundo lugar, puedes usar la función de reemplazo para reemplazar al reemplazar, y puede usar la función substr para extraer palabras Extraerlo, lo que ahorrará muchas operaciones.

//知识点:字符串模拟+双指针
#include<bits/stdc++.h>
using namespace std;
int n;
int main()
{
    cin >> n, getchar();
    while( n-- ) {
        string s, p;
        getline( cin, s);
        cout << s << endl;
        while(s[0]==' ') s.erase(s.begin()); //删除句首前面的空格
        while(s[s.size()-1]==' ') s.erase(s.end()-1); //删除句尾后面的空格
        for(int i=0; s[i]!='\0'; i++)//删除单词之间的多余空格换成一格以及标点符号前的空格
            if(s[i] == ' ') {
                while(s[i+1]==' ') s.erase(s.begin()+i+1); //删除单词之间的多余空格换成一格
                if(!isalnum(s[i+1])) s.erase(s.begin()+i); //删除标点符号前的空格
            }
        for(int i = 0; s[i]!='\0'; i++) { //大写换小写并且把?换成!
            if(s[i]>='A' && s[i]<='Z'&&s[i]!='I') s[i] = s[i]-'A'+'a';
            if(s[i]=='?') s[i]='!';
        }
        for(int i=0; i<s.size(); i++) { //双指针算法截取每一个单词按照规则替换
            while(i<s.size() && s[i] == ' ') i++;
            int j = i;
            while( j<s.size() && isalnum(s[j])) j++;
            string z = s.substr(i,j-i); //把单词截取出来
            if(z == "you") { //"can you"和"could you"分别替换成"I can"和"I could",因为前一个单词不变,所以不用替换
                if(p == "can") s.replace(i-4,7,"I can"), j-=2; //替换
                if(p == "could") s.replace(i-6,9,"I could"), j-=2; //替换
            }
            else if(z =="I"||z =="me") s.replace(i,z.size(),"you"), p="you", j-= (z=="I"?1:2); //把"I"和"me"替换成"you",并且更换前一个单词
            //j-=····是把j移到替换后的单词的最后一位
            i = j, p = z; //i更新寻找下一个单词,p更新前一个单词
        }
        cout<<"AI: "<<s<< endl;
    }
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/qq_51936803/article/details/129942906
Recomendado
Clasificación