题目描述
密码要求:
1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有相同长度超2的子串重复
说明:长度超过2的子串
输入描述:
一组或多组长度超过2的子符串。每组占一行
输出描述:
如果符合要求输出:OK,否则输出NG
示例1
输入
021Abc9000
021Abc9Abc1
021ABC9000
021$bc9000
输出
OK
NG
NG
OK
代码:
int main()
{
vector<string> ostrs;
vector<string> istrs;
string str;
string OK = "OK";
string NG = "NG";
string all;
cin >> all;
for(unsigned int ii = 0; ii < all.size(); ii++)
{
if(' ' == all[ii])
{
istrs.push_back(str);
str.clear();
}
else
str.push_back(all[ii]);
}
for(unsigned int ii = 0; ii < istrs.size(); ii++)
{
str = istrs[ii];
//第一个条件
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);//此处3指择取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;
}