题解 | #密码验证合格程序#

密码验证合格程序

http://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841

使用正则表达式

正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。

例如,’(\d)(a)\1’ 匹配第一是数字第二是字符a,第三\1必须匹配第一个一样的数字重复一次,也就是被引用一次。如9a9 被匹配,但9a8不会被匹配,因为第三位的\1必须是9才可以.

".*(...)(.*\\1).*": \\1 表示第一个括号重复一次

#include <regex>
using namespace std;

bool is_password(string s)
{
    if (s.size() <= 8) return false;
    string re[4] = {"[a-z]", "[A-Z]", "[\\d]", "[^a-z0-9A-Z]"};
    //四种正则表达式
    int cnt = 0;
    for (int i = 0; i < 4; i ++ )
    {
        regex pattern(re[i]);//表示有一个正则表达式类
        if (regex_search(s, pattern)) cnt ++;
    }
    if (cnt < 3) return false;
    
    regex pattern(".*(...).*\\1.*");
    if (regex_search(s, pattern)) return false;
    
    return true;
}

int main()
{
    string s;
    while (cin >> s)
    {
        bool flag = is_password(s);
        if (flag) puts("OK");
        else puts("NG");
    }
    
}
全部评论

相关推荐

1个小白:可以考虑投一下字节
点赞 评论 收藏
分享
不敢追175女神:换成北京市民应该好很多😋
点赞 评论 收藏
分享
评论
5
1
分享

创作者周榜

更多
牛客网
牛客企业服务