C++正则表达式在程序设计天梯赛中的应用

C++正则表达式在程序设计天梯赛中的应用,第1张

正则表达式 正则表达式的基本语法
"6{3}":要求数字6出现3"6{10,}":连续的数字6至少出现10"6{4,9}":连续的数字6至少出现4次,至多出现9".":表示一个任意字符
"^a":要求字符串以字符a开头
"b$":要去字符串以字符b结尾
"[abc]":表示该字符是abc三个字符中的任意一个
"[^abc]":表示该字符不是abc三个字符中的任意一个
"[a-z]":表示一个字符,该字符是任意一个小写字母
"[^a-z]":表示一个字符,该字符不是任意一个小写字母
"\w":表示一个字符,是数字字母下划线中的任意一个
"\W":表示一个字符,不是数字字母下划线中的任意一个
"\d":表示一个字符,是数字0-9中的任意一个
"\D":表示一个字符,不是数字0-9中的任意一个
"\s":表示一个空白符
"a*":要求字符a出现0到多次
"a+":要求字符a出现1到多次
"a?":要求字符a出现0次或1"\":所有含有\的元字符,都要写成"\"
C++头文件 < r e g e x > <regex>中的函数
regex_match(fa_str,regex(son_str)):
若子串son_str与母串fa_str完全匹配,返回true
否则为false
regex_search(fa_str,regex(son_str)):
若母串fa_str包含子串son_str,返回true
否则为false
regex_replace(fa_str,regex(son_str),str):
先复制一个fa_str,再用字符串str替换fa_str中所有符合son_str这一正则表达式的子串
返回值为替换后的母字符串
第四届程序设计天梯赛选题

以下三题难度逐题递增,但利用正则表达式,均可秒杀题目,而无需写大模拟浪费时间

L1-2 6翻了

题目链接 L1-2 6翻了
10行代码实现

#include
#include
using namespace std;
int main()
{
	string s;getline(cin,s);
    s=regex_replace(s,regex("6{10,}"),"27");
    s=regex_replace(s,regex("6{4,9}"),"9");
    cout<<s<<endl;return 0;
}
L1-3 敲笨钟

题目链接 L1-3 敲笨钟
20行代码实现

#include
#include
using namespace std;
string s[25];
int main()
{
	int n; cin >> n;
    getchar();
	for (int i = 1; i <= n; i++)getline(cin, s[i]);
	for (int i = 1; i <= n; i++) {
        bool f1=regex_search(s[i],regex("ong,"));
        bool f2=regex_search(s[i],regex("ong\."));
        if(f1&&f2){
            s[i]=regex_replace(s[i],regex("([^ ]{1,}) ([^ ]{1,}) ([^ \.]{1,})\."),"qiao ben zhong.");
            cout<<s[i]<<endl;
        }
        else puts("Skipped");
	}
	return 0;
}
L1-8 估值一亿的AI核心代码

题目链接 L1-8 估值一亿的AI核心代码
20行代码实现

#include
#include
using namespace std;
string s;void f(string s1,string s2){s=regex_replace(s,regex(s1),s2);}
void delete_space(){f(" +"," "),f("^ ",""),f(" $","");
f(" ,",","),f(" \.","."),f(" !","!"),f(" \?","?");f(" '","'");}
void to_lower(){for(auto &i:s)if(i!='I')i=tolower(i);}
void replace(){f("\bcan you\b","_I can"),f("\bcould you\b","_I could");
f("\bI\b","you"),f("\bme\b","you"),f("\b_I can\b","I can");
f("\b_I could\b","I could"),f("\?","!");}
void solve(){delete_space(),to_lower(),replace();}
int main()
{
	int n;cin >> n;getchar();
	while (n--) {
		getline(cin, s);cout << s << endl << "AI: ";
        solve();cout<<s<<endl;
	}
	return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/673643.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存