原题链接
题目:
输入样例:
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
输出样例:
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
这道题我改了一下午,总结出几个易错的地方
- 行首行尾可能有多个空格,不是只有一个空格
- 删除空格和改大写字母问号的操作不能在同一个循环里,否则会出现下标错位,erase删除后数组的长度是有变化的,因此可能导致直接跳过了大写字母和问号
- 建议使用isalnum函数来判断是否是字母和数字,不要用ascall码判断,不然会出现if判断语句很长很长的情况,很难找错,也很容易粗心写错
- 使用find函数查找字符串时要循环查找,并且每次更新查找开始的下标为上一次找到的下标+1,直到找不到为止,因为find函数返回的是第一次出现目标字符串的下标。
- (最重要的一点!!)修改can you和could you应该在修改I和me之前,因为可能出现这种情况:如果me在can或者could后面,那么就不需要改整句话,只需要将me改成you,但如果修改I,me操作在前,那么就会把修改后的me改成I can或I could,就有违背题意,相当于把can me,could me改成 I can,I could,可能说的有点绕,如果有不懂的欢迎评论区提问或者私信我。(这一点是我实在找不到bug参考了别人的代码发现的问题)
差不多解决了这些bug就能过了。
这是完整代码,如果还有不懂的详见注释
#include <iostream>
#include <string>
#include <cstdio>
using namespace std;
string m[4