题解 | #密码验证合格程序#
密码验证合格程序
http://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841
通过set实现对第三个要求的简单判断
#include <iostream>
#include <set>
#include <ctype.h>
#include <numeric>
using namespace std;
void check(int a[4], char c){
if(isupper(c)) a[0] = 1;
else if(islower(c)) a[1] = 1;
else if(isdigit(c)) a[2] = 1;
else a[3] = 1;
}
//利用set的特性,可实现对第三个要求的简单判断
//set有自动去重功能,判断长度就可以知道是否有重复
int main(){
string str;
set<string> unique;
while(cin >> str){
unique.clear(); //先将set清空
int mark[4] = {0, 0, 0, 0}; //标记数组置零
bool flag = false;
if(str.length() > 8){
for(int i = 0; i <= str.length() - 3; i++){
string str_sub = str.substr(i, 3); //截取长度为3的子串
unique.insert(str_sub);
check(mark, str[i]); //检查字符类别
}
//最后两个字符不要漏掉
check(mark, str[str.length() -1]);
check(mark, str[str.length() -2]);
if(accumulate(mark, mark + 4, 0) >= 3){ //数组求和
if(unique.size() == str.length() - 2) //通过判断set长度,来判断是否有重复的
flag = true;
}
}
if(flag) cout << "OK" << endl;
else cout << "NG" << endl;
}
return 0;
}