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
correspondentementeI can
——aquiI 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 ;me
you
- 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;
}