密码验证合格程序
2017-08-30 15:57
274 查看
题目描述
密码要求:1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有相同长度超2的子串重复
说明:长度超过2的子串
输入描述:
一组或多组长度超过2的子符串。每组占一行输出描述:
如果符合要求输出:OK,否则输出NG示例1
输入
021Abc9000 021Abc9Abc1 021ABC9000 021$bc9000
输出
OK
NG
NG
OK
#include<iostream> #include<string> #include<vector> using namespace std; bool RepeatedSubStr(string s, int len) { for (int i = 0; i<len - 2; i++) { string s1 = s.substr(i, 3); if (s.find(s1, i + 3) != string::npos) return false; } return true; } int main() { string s; vector<string> vec; while (getline(cin, s)) { int flag[4] = { 0 }; int len = s.length(); if (len <= 8) { vec.push_back("NG"); continue; } for (int i = 0; i<len; i++) { if (s[i] >= '0'&&s[i] <= '9') flag[0] = 1; else if (s[i] >= 'a'&&s[i] <= 'z') flag[1] = 1; else if (s[i] >= 'A'&&s[i] <= 'Z') flag[2] = 1; else flag[3] = 1; } if (flag[0] + flag[1] + flag[2] + flag[3]<3) { vec.push_back("NG"); continue; } if (!RepeatedSubStr(s, len)) { vec.push_back("NG"); continue; } vec.push_back("OK"); } vector<string> ::iterator iter; for (iter = vec.begin(); iter != vec.end(); iter++) cout << *iter << endl; }