题目描述
密码要求:
1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有相同长度超2的子串重复
说明:长度超过2的子串
输入描述:
一组或多组长度超过2的子符串。每组占一行
输出描述:
如果符合要求输出:OK,否则输出NG
示例1
输入
021Abc9000
021Abc9Abc1
021ABC9000
021$bc9000
输出
OK
NG
NG
OK
代码如下
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
vector<string> ostrs;
string str;
string OK = "OK";
string NG = "NG";
while(getline(cin,str))
{
//第一个条件
if(str.size() <= 8)
{
ostrs.push_back(NG);
continue;
}
//第二个条件
char type[4] = {0};
for(unsigned int i = 0; i < str.size(); i++)
{
char c = str[i];
if('0' <= str[i] && str[i] <= '9')
type[0] = 1;
else if('a' <= str[i] && str[i] <= 'z')
type[1] = 1;
else if('A' <= str[i] && str[i] <= 'Z')
type[2] = 1;
else
type[3] = 1;
}
int sum = 0;
for(unsigned int j = 0; j < 4; j++)
sum += type[j];
if(sum < 3)
{
ostrs.push_back(NG);
continue;
}
//第三个条件
int pos = -1;
for(unsigned int j = 0; j < str.size(); j++)
{
string sstr = str.substr(j,3);
pos = str.find(sstr,j+3);
if(pos != string::npos)
break;
}
if(pos == string::npos)
ostrs.push_back(OK);
else
ostrs.push_back(NG);
}
for(unsigned int i = 0; i < ostrs.size(); i++)
cout << ostrs[i] << endl;
return 0;
}