标签:content 程序 标点符号 i++ back code erase its chat
以上图片来自新浪微博。
本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是:
I
;can you
、could you
对应地换成 I can
、I could
—— 这里“独立”是指被空格或标点符号分隔开的单词;I
和 me
换成 you
;?
换成惊叹号 !
;输入首先在第一行给出不超过 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; } }
标签:content 程序 标点符号 i++ back code erase its chat
原文地址:https://www.cnblogs.com/Pretty9/p/11440319.html