题目描述
密码要求:
1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有相同长度大于2的子串重复
输入描述:
一组或多组长度超过2的子符串。每组占一行
输出描述:
如果符合要求输出:OK,否则输出NG
示例1
输入
021Abc9000 021Abc9Abc1 021ABC9000 021$bc9000
输出
OK NG NG OK
思路:寻找重复子串,用最容易想到的方法,就是string的find()函数就行了。C++ string中的find()函数
#include<bits/stdc++.h>
using namespace std;
int main()
{
int isUpper=0,isLower=0,isDigit=0,isOther=0,flag=0;
string password;
while(cin>>password)
{
flag=1,isUpper=0,isLower=0,isDigit=0,isOther=0;
if(password.size()<=8)
{
flag=0;
}
else
{
for(int i=0;i<password.size();i++)
{
if(password[i]>='A'&&password[i]<='Z')
{
isUpper=1;
}
else if(password[i]>='a'&&password[i]<='z')
{
isLower=1;
}
else if(password[i]>='0'&&password[i]<='9')
{
isDigit=1;
}
else
{
isOther=1;
}
}
if(isUpper+isLower+isDigit+isOther<3)
{
flag=0;
}
for(int j=0;j+3<password.size();j++)//是j+3 ,j+3<=len-1, tmp=[j,j+1,j+2],j+3是用来寻找重复子串的起始位置
{
string tmp=password.substr(j,3);
if(password.find(tmp,j+3)!=-1)
{
flag=0;
break;
}
}
}
if(flag)
{
cout<<"OK"<<endl;
}
else
{
cout<<"NG"<<endl;
}
}
}