赞
踩
题目链接-L1-064 估值一亿的AI核心代码
以上图片来自新浪微博。
本题要求你实现一个稍微更值钱一点的 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
正则表达式牛逼!!!
符号 | 作用 |
---|---|
\ | 能够改变字符原本的含义 |
^ | 指示字符串的头,且要求字符串以字符开头,^ 表示一个真正的^符号 |
$ | 指示字符串的尾,且要求字符串以字符结尾,$表示一个真正的$符号 |
\b | 匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b’ 可以匹配"never" 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’。 |
\B | 匹配非单词边界。‘er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’ |
\< | 匹配单词开头位置 |
\> | 匹配单词结尾位置 |
| | 连接两个子表达式,表示或的关系,a|b,a与b中只能取一个 |
. | 表示一个除了\n以外的任意一个字符,\.表示一个真正的.符号 |
\d | 匹配一个数字字符。等价于 [0-9]。 |
\D | 匹配一个非数字字符。等价于 [^0-9]。 |
\f | 匹配一个换页符。等价于 \x0c 和 \cL。 |
\n | 匹配一个换行符。等价于 \x0a 和 \cJ。 |
\r | 匹配一个回车符。等价于 \x0d 和 \cM。 |
\s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。 |
\S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 |
\t | 匹配一个制表符。等价于 \x09 和 \cI。 |
\v | 匹配一个垂直制表符。等价于 \x0b 和 \cK。 |
\w | 匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’。 |
\W | 匹配任何非单词字符。等价于 ‘[^A-Za-z0-9_]’ |
量词元字符
字符串模拟,regex_place()
替换
具体操作见代码,思路见注释
#include<bits/stdc++.h> #define int long long #define lowbit(x) (x &(-x)) using namespace std; const int INF=0x3f3f3f3f; const double PI=acos(-1.0); const double eps=1e-10; const int M=1e9+7; const int N=1e5+5; typedef long long ll; typedef pair<int,int> PII; signed main(){ ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); int n; cin>>n; cin.ignore(); while(n--) { string s; getline(cin,s); cout<<s<<endl; s=regex_replace(s,regex("(\\s+)")," ");//删除连续的多余空格 if(s.front()== ' ') s.erase(s.begin());//删除字符串行首的空格 if(s.back()==' ') s.pop_back();//删除字符串行末的空格 s=regex_replace(s,regex("( !)"),"!");//删除!前的空格 s=regex_replace(s,regex("( ,)"),",");//删除,前的空格 s=regex_replace(s,regex("( \\.)"),"."); //删除.前的空格 s=regex_replace(s,regex("( \\?)"),"?"); //删除?前的空格 s=regex_replace(s,regex("( ')"),"'");//删除'前的空格 for(auto &c:s) if(c!='I') //除了I的字母 c=tolower(c);//转化为小写字母 s=regex_replace(s,regex("(\\bcan you\\b)"),"_I can");//将can you替换为I can s=regex_replace(s,regex("(\\bcould you\\b)"),"_I could");//将could you替换为I could s=regex_replace(s,regex("(\\bI\\b)"),"you");//将I替换为you s=regex_replace(s,regex("(\\bme\\b)"),"you");//将me替换为you s=regex_replace(s,regex("(\\?)"),"!");//将?替换为! s=regex_replace(s,regex("(\\b_I\\b)"),"I");//为了避免重复替换而设置的_I换回I cout<<"AI: "<<s<<endl; } return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。