題目描述
密碼要求:
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;
}