华为笔试-密码验证合格程序

题目描述

密码要求:

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;
}


 

猜你喜欢

转载自blog.csdn.net/feengg/article/details/83899717