题解 | #密码验证合格程序#
密码验证合格程序
https://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841
#include <iostream> #include <regex> using namespace std; bool CheckCode(string s) { if (s.size() <= 8) { return false; } regex reglow("^.*[a-z]+.*$"); regex regupper("^.*[A-Z]+.*$"); regex regnum("^.*[0-9]+.*$"); regex regspec("^.*[^a-zA-Z0-9\\s\\n]+.*$"); int valid = 0; if (regex_match(s, reglow)) { valid++; } if (regex_match(s, regupper)) { valid++; } if (regex_match(s, regnum)) { valid++; } if (regex_match(s, regspec)) { valid++; } if (valid < 3) { return false; } //子串重复只需要检查最少的3位,因为如果存在大于3位的重复子串, //必然包含了3位重复子串,就可以判定密码非法了。 for (int i=0; i<s.size()-6; i++) { string sub = s.substr(i, 3); string leftstr = s.substr(i + 3); if (leftstr.find(sub) != string::npos) { return false; } } return true; } int main() { string code; while (getline(cin, code)) { if (CheckCode(code)) { cout << "OK" << endl; } else { cout << "NG" << endl; } } }