Código principal de IA avaliado em 100 milhões

As fotos acima são do Sina Weibo.

Esta pergunta exige que você implemente um programa de resposta a perguntas de inglês AI um pouco mais valioso. As regras são:

  • Não importa o que o usuário diga, primeiro imprima o que a outra parte disse em uma linha;
  • Elimine espaços redundantes no texto original: substitua vários espaços entre palavras adjacentes por um espaço, exclua todos os espaços no início e no final da linha e exclua os espaços antes dos sinais de pontuação;
  • Altere todas as letras maiúsculas em inglês no texto original para minúsculas, exceto  I;
  • Substitua todos os independentes no texto original  por can you, could you correspondentemente  I can——aqui I could"independente" refere-se a palavras separadas por espaços ou sinais de pontuação;
  •  Substitua  todas as I somas  independentes  no texto original por ;meyou
  • Substitua todos os pontos de interrogação no texto original  ? por pontos de exclamação  !;
  • Emita a frase substituída em uma linha como a resposta da IA.

Formato de entrada:

Entrada Primeiro, um inteiro positivo N não excedendo 10 é fornecido na primeira linha, seguido por N linhas, e cada linha fornece um diálogo do usuário não excedendo 1000 caracteres e terminando com um retorno de carro. O diálogo é uma string não vazia , incluindo apenas letras, números, espaços, pontuação visível de meia largura.

Formato de saída:

Saída de acordo com os requisitos do título, devendo ser adicionado um espaço antes de cada resposta de IA  AI: .

Exemplo 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

Exemplo de saída:

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

Ideias:

        Ao fazer esta pergunta, você deve ser organizado e claro, e preencher os requisitos um a um. Não os misture para completá-los, o que pode causar confusão, e conclua-os passo a passo.
        1. Elimine o primeiro e o último espaço
        2. Elimine espaços redundantes entre palavras e espaços antes dos símbolos
        3. Converta todas as letras maiúsculas, exceto I, em minúsculas e substitua o ponto de interrogação? Substitua-o por um ponto de exclamação! ;
        4. Use o algoritmo de ponteiro duplo para digitalizar e extrair a palavra da frase e fazer o julgamento de eu e eu e você pode e você poderia. Ao fazer o julgamento de você pode e você pode, você pode usar uma string variável para extrair a anterior com antecedência Anote as palavras que saem, de modo que, desde que a palavra anterior seja can, could e a palavra seja você, você pode determinar qual das duas é. Em segundo lugar, você pode usar a função replace para substituir ao substituir, e você pode usar a função substr para extrair palavras Extract, o que economizará muitas operações.

//知识点:字符串模拟+双指针
#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;
}

おすすめ

転載: blog.csdn.net/qq_51936803/article/details/129942906