题解 AT3602 【AKIBA】

你们 python java 都用 正则表达式\large \color{red} \text{正则表达式},不要以为 c++ 没有正则表达式了!

c++ 中的正则表达式需要包含头文件 <regex>,然后就可以声明某个正则表达式:

regex name(^value$); // 其中^与$均可省略,^代表开始,$代表结束

如:
regex reg("^abc+$");

那么这里可以匹配的字符串就有:

abc
abcc
abccc
abcccc
abccccc
abcccccc
abccccccc
以及其他前面ab并且后面有大于等于1个的c

那么正则表达式还有一个重要字符 ?,它代表前面括号中(如果没有括号就是前一个字符)的字符串有也可以没有,所以对于正则表达式 ab(cc)?abccab 均可以匹配,而 abc 则不能匹配。

那么如何判断某个字符串与某个正则表达式匹配?我们需要用到函数 regex_match,其函数通常为两个,第一个是需要匹配的字符串,第二个是正则表达式,返回值为 bool 类型,匹配成功返回 true,否则返回 false

其实正则表达式还有很多其他符号与函数,可以自行百度。

所以本题其实可以用正则表达式做:

#include <regex>
#include <iostream>
#include <string>
using namespace std;

int main()
{
    regex reg("^A?KIHA?BA?RA?$");
    string st;
    cin >> st;
    if(regex_match(st, reg))
    {
        cout << "YES\n";
    }
    else
    {
        cout << "NO\n";
    }
    return 0;
}

码字不易,求赞!

posted @ 2021-01-01 15:55  HappyBobb  阅读(7)  评论(0)    收藏  举报  来源