题解 | #密码验证合格程序#
密码验证合格程序
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");
}
}