第四章学习小结
作者:互联网
第四章学习小结
上周一共有三道编程题,因为对于KMP算法理解得还不是很透彻,我就用AI核心代码作为例子。这道题是老师带着我们打的,所以这道题完成得比较轻松。
本题要求你实现一个简易版的 AI 英文问答程序,规则是:
- 无论用户说什么,首先把对方说的话在一行中原样打印出来;
- 消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉;
- 把原文中所有大写英文字母变成小写,除了 I;
- 把原文中所有独立的 I 和 me 换成 you;
- 把原文中所有的问号 ? 换成惊叹号 !;
- 把原文中所有独立的 can you 换成 I can —— 这里“独立”是指被空格或标点符号分隔开的单词;
- 在一行中输出替换后的句子作为 AI 的回答。
按照老师的方法,我们先不用具体想怎样去实现,先想好用什么步骤
- 就先打出主函数:
int main() { int n; string s; cin >> n; getchar(); //吸收回车 for(int i=1; i<=n; i++){ getline(cin ,s); cout << s << endl; cout << "AI: "; go(s); //根据s输出AI的回答 } return 0; }View Code
然后把所有的功能都用go函数去完成
- go函数:
void go(string s) { char t[3003]; int i,j=0; for(i=0; s[i]==' '; i++) //删掉开头空格 j=0; while(s[i]!='\0'){ //连续的空格中只保留第一个空格 if(s[i]==' ' && s[i-1]==' '){ i++; continue; } if(s[i]=='?'){ //将?转换为! t[j]='!'; i++; j++; continue; } if(s[i]!='I') //将I以外的大写字母转换为小写 t[j++]=tolower(s[i++]); else t[j++]=s[i++]; } t[j] = '\0'; //把原文中所有独立的 I 和 me 换成 you,所有独立的 can you 换成 I can j = 0; while(t[j]!='\0'){ //还未到结尾 if(t[j]=='I' && (j==0 || isDependent(t[j-1])) && isDependent(t[j+1])){ //I换成you cout << "you"; ++j; continue; } if(t[j]=='m' && t[j+1]=='e' && (j==0 || isDependent(t[j-1])) && isDependent(t[j+2])){ //me换成you cout << "you"; j+=2; continue; } if(isCanyou(t,j) && isDependent(t[j-1]) && isDependent(t[j+7])){ //can you换成I can cout << "I can"; j+=7; continue; } if(t[j]==' ' && isDependent(t[j+1])){ ++j; continue; } cout << t[j]; ++j; } cout << endl; }View Code
里面还包含了两个bool函数
- 判断是否独立存在的isDependent函数:
bool isDependent(char ch) //判断字符是否为除数字和字母以外的字符 { ch=tolower(ch); if((ch>='0' && ch<='9') || (ch>='a' && ch<='z')) return false; else return true; }View Code
- 判断是否为一个独立的can you的函数:
bool isCanyou(char t[],int j) //判断一个独立的can you { if(t[j]=='c' && t[j+1]=='a' && t[j+2]=='n' && t[j+3]==' ' && t[j+4]=='y' && t[j+5]=='o' && t[j+6]=='u'){ if((j==0 || isDependent(t[j-1]) ) && isDependent(t[j+7])) return true; } else return false; }View Code
- 心得体会:
以前打题的时候都喜欢想到哪打到哪,直接把问题很具体化,导致思绪很容易乱,容易漏细节,现在的方法就是像老师这样先打出大的步骤,然后再具体化,一个一个要求去实现过程就很清晰了
- 接下来的任务:
还是想多打一点代码,先把这种方法用熟
标签:原文中,空格,ch,++,学习,isDependent,&&,小结,第四章 来源: https://www.cnblogs.com/zhongjieying/p/10706878.html