题目描述
密码要求:
1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有相同长度超2的子串重复
说明:长度超过2的子串
输入描述:
一组或多组长度超过2的子符串。每组占一行
输出描述:
如果符合要求输出:OK,否则输出NG
代码如下,此题唯一的难点是如何有效判断四种符号是否出现3种及3种以上,代码如下,
#include<iostream>
#include<string>
#include<vector>
using namespace std;
void count(char c,vector<int>& ves)
{
if(c>='a'&&c<='z'){
ves[0]=1;
}else if(c>='A'&&c<='Z'){
ves[1]=1;
}else if(c>='0'&&c<='9'){
ves[2]=1;
}else{
ves[3]=1;
}
}
int main()
{
string str;
while(getline(cin,str)){
vector<int> ves(4,0);
bool isrep=false;
int i=0,n=str.size();
for(;i<n-3;i++){
count(str[i],ves);
string s=str.substr(i,3);
if(str.find(s,i+3)!=string::npos){
isrep=true;
break;
}
}
for(;i<n;i++){
count(str[i],ves);
}
int sum=ves[0]+ves[1]+ves[2]+ves[3];
if(str.size()>8&&sum>=3&&!isrep){
cout<<"OK"<<endl;
}else{
cout<<"NG"<<endl;
}
}
return 0;
}