密码验证合格程序
程序员文章站
2022-07-13 14:26:01
...
题目描述
密码要求:
1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有相同长度超2的子串重复
说明:长度超过2的子串
输入描述:
一组或多组长度超过2的子符串。每组占一行
输出描述:
如果符合要求输出:OK,否则输出NG
示例
输入:
021Abc9000
021Abc9Abc1
021ABC9000
021$bc9000
输出:
OK
NG
NG
OK
代码:
#include <iostream>
#include <string>
using namespace std;
bool leastThree(string StrVec);
bool sameTwo(string Str);
int main()
{
string Str;
while(cin>>Str)
{
if(Str.size()>8&&leastThree(Str)&&sameTwo(Str))
{
cout<<"OK"<<endl;
}
else
{
cout<<"NG"<<endl;
}
}
return 0;
}
bool leastThree(string StrVec)
{
bool small=false;
bool big=false;
bool digital=false;
bool other=false;
int leastNum=0;
int count[4]={0};
for(int j=0;j<StrVec.size();j++)
{
if((StrVec[j])>='A'&&(StrVec[j])<='Z')
{
//leastNum++;
count[0]=1;
}
else if((StrVec[j])>='a'&&(StrVec[j])<='z')
{
//leastNum++;
count[1]=1;
}
else if((StrVec[j])>='0'&&(StrVec[j])<='9')
{
//leastNum++;
count[2]=1;
}
else
{
//leastNum++;
count[3]=1;
}
}
//big&&small&&digital
//small&&digital&&other
//big&&digital&&other
//
int all=0;
for(int i=0;i<4;i++)
{
all+=count[i];
}
if(all>=3)
return true;
else
return false;
}
bool sameTwo(string Str)
{
for(int i=0;i<Str.size()-3;i++)
{
string temp=Str.substr(i,3);
if(Str.find(temp,i+3)==-1)//没找到相同的子串
{
}
else
return false;
}
return true;
}