L1-064 估值一亿的AI核心代码 (20 分)
Posted pretty9
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了L1-064 估值一亿的AI核心代码 (20 分)相关的知识,希望对你有一定的参考价值。
L1-064 估值一亿的AI核心代码 (20 分)
以上图片来自新浪微博。
本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是:
- 无论用户说什么,首先把对方说的话在一行中原样打印出来;
- 消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉;
- 把原文中所有大写英文字母变成小写,除了
I
; - 把原文中所有独立的
can you
、could you
对应地换成I can
、I 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 == 0) || isspace(line[s - 1]) || is_fuhao(line[s - 1])) && ((t == limit) || isspace(line[t + 1]) || is_fuhao(line[t + 1]))); int find_duli(string s, int pos) int idx; int len = line.length(); while(pos < len && (idx = line.find(s, pos)) >= 0) if(is_duli(idx, idx + s.length() - 1, len - 1)) return idx; else pos += s.length(); return -1; void replace_unit(string o, string t) bool isUpdate = true; int pos = 0; while(pos < (int)line.length() && isUpdate) isUpdate = false; int idx = find_duli(o, pos); if(idx >= 0) 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 = 0; isUpdate = false; for(int i = pos; i < len; i++) // 结尾不会是空格,不会越界 if(isspace(line[i]) && (isspace(line[i + 1]) || is_fuhao(line[i + 1]))) line.erase(i, 1); 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(0,line.find_first_not_of(" ")); line.erase(line.find_last_not_of(" ") + 1); 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;
以上是关于L1-064 估值一亿的AI核心代码 (20 分)的主要内容,如果未能解决你的问题,请参考以下文章
L1-064 估值一亿的AI核心代码 (20分) 团体程序设计天梯赛-练习集
PTA团体程序设计天梯赛题目集 L1-064 估值一亿的AI核心代码 (20分)