密码要求:
1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有相同长度大于2的子串重复
#include<iostream>
#include<string>
using namespace std;
// 判断长度
bool lenIsValid(string str){
if(str.length()<=8){
return false;
}
return true;
}
// 判断条件2
bool IsValidnum(string str){
int flag[4]= {0};
for(int i = 0;i<str.length();i++){
if(str[i]>='A' && str[i]<='Z'){
flag[0] = 1;
}
else if(str[i]<='z' && str[i]>='a'){
flag[1] = 1;
}
else if(str[i]>='0' && str[i]<='9'){
flag[2] = 1;
}
else{
flag[3] = 1;
}
// 条件满足及时退出
if(flag[0]+flag[1]+flag[2]+flag[3]>=3){
return true;
}
}
return false;
}
// 条件3
bool isValid(string str){
string temp ;
// 不能有相同长度大于2的子串重复 可以理解为以i开始的最短长度为3的子串,从i+3的位置开始找temp
for(int i = 0;i+3<str.length();i++){
temp = str.substr(i,3);
if(str.find(temp,i+3) == -1){ //也可写成 str.find(temp,i+3) != string::npos
continue;
}
else{
return false;
}
}
return true;
}
int main(){
string str;
while(cin>>str){
if(lenIsValid(str) && IsValidnum(str) && isValid(str)){
cout<<"OK"<<endl;
}
else{
cout<<"NG"<<endl;
}
}
return 0;
}