L1-064 估值一亿的AI核心代码 (20 分)
 

以上图片来自新浪微博。

本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是:

  • 无论用户说什么,首先把对方说的话在一行中原样打印出来;
  • 消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉;
  • 把原文中所有大写英文字母变成小写,除了 I
  • 把原文中所有独立的 can youcould you 对应地换成 I canI could—— 这里“独立”是指被空格或标点符号分隔开的单词;
  • 把原文中所有独立的 I 和 me 换成 you
  • 把原文中所有的问号 ? 换成惊叹号 !
  • 在一行中输出替换后的句子作为 AI 的回答。

输入格式:

输入首先在第一行给出不超过 10 的正整数 N,随后 N 行,每行给出一句不超过 1000 个字符的、以回车结尾的用户的对话,对话为非空字符串,仅包括字母、数字、空格、可见的半角标点符号。

输出格式:

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

输入样例:

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 ***注意,如果你也是卡在第二个测试点,可以测试 [can I can] -> [can you can] 和 [can you you] -> [I can you]***
#include <bits/stdc++.h>
using namespace std; string line, orign; bool is_fuhao(char c) {
return (!isspace(c) && !isalpha(c) && !isdigit(c));
} bool is_duli(int s, int t, int limit) { return (((s == ) || isspace(line[s - ]) || is_fuhao(line[s - ]))
&& ((t == limit) || isspace(line[t + ]) || is_fuhao(line[t + ])));
} int find_duli(string s, int pos) {
int idx;
int len = line.length();
while(pos < len && (idx = line.find(s, pos)) >= ) {
if(is_duli(idx, idx + s.length() - , len - ))
return idx;
else
pos += s.length();
}
return -;
} void replace_unit(string o, string t) {
bool isUpdate = true;
int pos = ;
while(pos < (int)line.length() && isUpdate) {
isUpdate = false;
int idx = find_duli(o, pos);
if(idx >= ) {
line.replace(idx, o.length(), t);
isUpdate = true;
pos = idx + o.length();
}
}
} void proc_replace() {
replace_unit("I", "You");
replace_unit("me", "You");
replace_unit("can you", "I can");
replace_unit("could you", "I could");
} void del_blank() {
bool isUpdate = true;
while(isUpdate) {
int len = line.length(), pos = ;
isUpdate = false;
for(int i = pos; i < len; i++) { // 结尾不会是空格,不会越界
if(isspace(line[i]) && (isspace(line[i + ]) || is_fuhao(line[i + ]))) {
line.erase(i, );
pos = i;
isUpdate = true;
break;
}
}
}
} void to_lower_tanhao() { transform(line.begin(), line.end(), line.begin(), [](char c)->char {
if(c == '?') return '!';
else if(c == 'I') return 'I';
return tolower(c);
}); } void input_and_trim() { getline(cin, orign);
line = orign; if(!line.empty()) {
line.erase(,line.find_first_not_of(" "));
line.erase(line.find_last_not_of(" ") + );
} } int main() { int n;
cin >> n;
getchar();
while(n --) {
input_and_trim();
to_lower_tanhao();
del_blank();
proc_replace();
to_lower_tanhao();
cout << orign << endl;
cout <<"AI: "<< line << endl;
} }
 

最新文章

  1. 实验:Oracle直接拷贝物理存储文件迁移
  2. NPOI操作EXCEL(二)——大量不同模板时设计方式
  3. Centos6.5系统初学者基本系统配置1
  4. 关于web请求中 获取真实IP
  5. redis基本数据类型【3】-List类型
  6. wpf采用Xps实现文档显示、套打功能(原创)
  7. js两个时间比较
  8. Eclipse 编码区-保护色-快捷大全
  9. document.all使用
  10. ssh框架的小实例(用户登录)
  11. Tinywebserver:一个简易的web服务器
  12. 《Metasploit魔鬼训练营》第三章
  13. tree的遍历--广度优先遍历
  14. 【Zookeeper】源码分析之服务器(二)之ZooKeeperServer
  15. java.security.ProviderException: java.security.KeyException
  16. go语言中的反射reflect
  17. TCP三次握手&amp;四次挥手(示意图)
  18. 【洛谷】【动态规划(二维)】P1508 Likecloud-吃、吃、吃
  19. Oracle ddl 和 dml 操作
  20. 解析C#彩色图像灰度化算法的实现代码详解

热门文章

  1. AngularJS复习小结
  2. token的解码及 判断值不为空的方法
  3. Flume-Spooling Directory Source 监控目录下多个新文件
  4. 一次galera cluster集群故障节点无法启动问题排查
  5. Go项目的测试代码2(项目运用)
  6. 2.使用kubeadm快速搭建k8s集群
  7. python中学习K-Means和图片压缩
  8. Elasticsearch常见错误与配置简介
  9. Django学习之缓存和信号
  10. centos7.5 解决缺少libstdc++.so.6库的原因及解决办法