PTA:7

您所在的位置:网站首页 估值英文单词 PTA:7

PTA:7

2024-06-16 15:53| 来源: 网络整理| 查看: 265

7-78 估值一亿的AI核心代码 (20分)

在这里插入图片描述 本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是:

无论用户说什么,首先把对方说的话在一行中原样打印出来; 消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉; 把原文中所有大写英文字母变成小写,除了 I; 把原文中所有独立的 can you、could you 对应地换成 I can、I could—— 这里“独立”是指被空格或标点符号分隔开的单词; 把原文中所有独立的 I 和 me 换成 you; 把原文中所有的问号 ? 换成惊叹号 !; 在一行中输出替换后的句子作为 AI 的回答。 输入格式: 输入首先在第一行给出不超过 10 的正整数 N,随后 N 行,每行给出一句不超过 1000 个字符的、以回车结尾的用户的对话,对话为非空字符串,仅包括字母、数字、空格、可见的半角标点符号。

输出格式: 按题面要求输出,每个 AI 的回答前要加上 AI: 和一个空格。

在这里插入图片描述 具体解析见代码:

#include using namespace std; void replace(char s[], char s1[], char s2[]){ char str[2000]={}; char *p=s,*q=s,*r=str; while(p=strstr(p,s1)){ if(p-s!=0&&isalpha(*(p-1))||isalpha(*(p+strlen(s1)))){ //比如ccan you或者can youu,不符合条件,则跳过 p++; continue; } while(q!=p) *r++=*q++; //将要改变的字符串前面的字符也赋值过去 for(int i=0; s2[i]; i++){ //s2赋值过去 *r++=s2[i]; } p += strlen(s1);//再变换后的位置,接着进行搜索要变换的字符串 q = p; //更新q的位置 } while(*q) *r++=*q++;//将最后的字符,赋值过去 *r=0; strcpy(s, str); //将改变后的字符串更新 } void solve(char s[]){ char str[2000]={}; int i=0,k=0; for(; s[i]==' '; i++); //消除字符串前面的空格 for(; s[i]; i++){ if(s[i]==' '&&!isalpha(s[i+1])&&!isdigit(s[i+1])) continue; //将多余的空格去掉,包括去掉‘,’前的空格 if(s[i]=='?') s[i] = '!'; if(isupper(s[i])&&s[i]!='I') s[i] = tolower(s[i]); str[k++]=s[i]; } replace(str,"I","S"); //先将I替换为S,防止将I can中的I变成了you replace(str,"can you","I can"); replace(str,"could you","I could"); replace(str,"me", "you"); replace(str,"S","you"); cout cin.getline(s,2000); puts(s); solve(s); } return 0; }

在这里插入图片描述 欢迎大家批评改正!!!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3