L1-064 估值一亿的AI核心代码 (20 分)
发布日期:2021-06-29 22:18:38 浏览次数:2 分类:技术文章

本文共 2253 字,大约阅读时间需要 7 分钟。

在这里插入图片描述

在这里插入图片描述

以上图片来自新浪微博。本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是:无论用户说什么,首先把对方说的话在一行中原样打印出来;消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉;把原文中所有大写英文字母变成小写,除了 I;把原文中所有独立的 can you、could you 对应地换成 I can、I could—— 这里“独立”是指被空格或标点符号分隔开的单词;把原文中所有独立的 I 和 me 换成 you;把原文中所有的问号 ? 换成惊叹号 !;在一行中输出替换后的句子作为 AI 的回答。输入格式:输入首先在第一行给出不超过 10 的正整数 N,随后 N 行,每行给出一句不超过 1000 个字符的、以回车结尾的用户的对话,对话为非空字符串,仅包括字母、数字、空格、可见的半角标点符号。输出格式:按题面要求输出,每个 AI 的回答前要加上 AI: 和一个空格。输入样例:6Hello ? Good to chat   with youcan   you speak Chinese?Really?Could you show me 5What Is this prime? I,don 't know输出样例:Hello ?AI: hello! Good to chat   with youAI: good to chat with youcan   you speak Chinese?AI: I can speak chinese!Really?AI: really!Could you show me 5AI: I could show you 5What Is this prime? I,don 't knowAI: what Is this prime! you,don't know
#include
#include
/*检查该字符是否属于标点或者空格,如果属于就输出true,如果不属于就输出false; */int checkedPost(char ch){
if(ch>='0'&&ch<='9') return 0; else if(ch=='I') return 0; else if(ch>='a'&&ch<='z') return 0; else return 1; } int Ichecked(char s[],int i){
//判断满足I字符前面为空格或者是第一个字符; i--; if(i>=0&&s[i]!=' ') return 0; i++; //判断该字符的后面也需要是空格或者标点符号; if(checkedPost(s[i+1])) return 1; else return 0;}int meChecked(char s[],int i){
//判断me字符串前面是否是空格; i--; if(i>=0&&s[i]!=' ') return 0; i++; //判断 if(s[i+1]=='e'&&checkedPost(s[i+2])) return 1; else return 0;}int cancould(char s[],int i){
/* 如果如果字符串前面第一个字符不是空格的话,说明该字符串不是独立的; */ i--; if(i>=0&&s[i]!=' ') return 0; i++; /* 判断是否是can you,并且需要保证后面是空格或者是标点符号分割的; 判断是否是could you,并且需要保证后面是空格或者是标点符号分割的; */ if(s[i+1]=='a'&&s[i+2]=='n'&&s[i+3]==' '&&s[i+4]=='y'&&s[i+5]=='o'&&s[i+6]=='u'&&checkedPost(s[i+7])) return 1; else if(s[i+1]=='o'&&s[i+2]=='u'&&s[i+3]=='l'&&s[i+4]=='d'&&s[i+5]==' '&&s[i+6]=='y'&&s[i+7]=='o'&&s[i+8]=='u'&&checkedPost(s[i+9])) return 2; else return 0; }void produceStr(char str[]){
char str2[1005]; int i=0,j=0,first=0,end=0,k=0; first=0; end=strlen(str)-1; while(str[first]==' ') first++; while(str[end]==' ') end--; for(i=first;i<=end;i++) {
if(str[i]>='A'&&str[i]<='Z'&&str[i]!='I') str2[k++]=str[i]+32; else if(str[i]==' ') {
while(str[i]==' ') i++; i--; str2[k++]=str[i]; } else str2[k++]=str[i]; } str2[k]='\0'; //测试;// printf("str2==%s\n",str2); for(i=0;i

转载地址:https://dingshijie.blog.csdn.net/article/details/115708060 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:L2-033 简单计算器 (25 分)
下一篇:L2-012 关于堆的判断 (25 分)

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月19日 20时36分22秒