【华为oj】密码验证合格程序

原创 2015年07月09日 20:53:20

问题描述:

密码是否合格的要求

1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有相同长度超2的子串重复
说明:长度超过2的子串
知识点:  字符串,数组  
题目来源:  内部整理  
练习阶段:  中级  
运行时间限制: 无限制 

内存限制: 无限制 


输入:  
一组或多组长度超过2的子符串。每组占一行

输出:  
如果符合要求输出:OK,否则输出NG
每行输出对应一组输入的结果;

样例输入: 021Abc9000
021Abc9Abc1
021ABC9000
021$bc9000
                 

样例输出: 

OK

NG
NG

OK 

问题分析:不能有相同长度超2的子串重复指===例如:aaaa就有两个长度超过了2的子串重复了,aaa、aaa重复了,又如:abcabc,同样的道理,也不符合要求,所以,需要你一个一个的递增遍历比较。

代码:

#include<iostream>
#include<string>
typedef unsigned int uint;
using namespace std;

//字符串长度检测
bool changdu(string str)
{
	if (str.size() <= 8)
		return false;
	else return true;
}




bool checkall(string str)//检测字符串包含字符的类型
{
	uint len;
	bool flags = false, flagdd = false, flagxd = false, flagf = false;
	//flags=数字,flagxd=小写字母,flagdd=大写字母, flagf=其他字符
	len = str.size();
	for (uint i = 0; i < len; i++)
	{
		if ('0' <= str[i] && str[i] <= '9')
			flags = true;
		else if ('a' <= str[i] && str[i] <= 'z')
			flagxd = true;
		else if ('A' <= str[i] && str[i] <= 'Z')
			flagdd = true;
		else if ((32 <= str[i] && str[i] <= 47) || (58 <= str[i] && str[i] <= 64) || (91 <= str[i] && str[i] <= 96) || (123 <= str[i] && str[i] <= 126))
			flagf = true;
	}
	if ((flags && flagdd && flagxd && flagf) || (flagdd && flagxd && flagf) || (flags && flagxd && flagf) || (flags && flagdd && flagf) || (flags && flagdd && flagxd))//字符类型大于等于3,返回true
		return true;
	else return false;
}

bool zichuan(string str)//字串重复检测
{
	uint len = str.size();
	for (uint i = 0; i < len-3; i++)
	{
		for (uint j = i + 1; j < len-2; j++)
		{
			if (str[i] == str[j] && str[i+1] == str[j+1] && str[i+2] == str[j+2])
			{
				return false;
			}
		}
	}
	return true;
}

void puanduan(string *str,uint pos)

{
	for (uint i = 0; i < pos; i++)
	{
		bool flag1 = changdu(str[i]);
		bool flag2 = checkall(str[i]);
		bool flag3 = zichuan(str[i]);
		if (flag1&&flag2&&flag3)
			cout << "OK";
		else 
			cout << "NG";

//if (i!=pos-1)
		cout << endl;
	}
}




int main()
{
	uint pos = 0;
	string *str = new string[100];
	getline(cin,str[0]);
	while (str[pos]!="")
	{
		pos++;	
		getline(cin, str[pos]);
	}
	puanduan(str, pos);

	return 0;

}


版权声明:本文为博主原创文章,未经博主允许不得转载。

华为oj之密码验证合格程序

2015/6/9记录

华为OJ——密码验证合格程序

密码验证合格程序 题目描述 密码要求: 1.长度超过8位 2.包括大小写字母.数字.其它符号,以上四种至少三种 3.不能有相同长度超2的子串重复 说明:长度超过2的子串 输入描述: 一组或多组长度超过...

华为OJ密码验证合格程序

描述 密码要求:   1.长度超过8位   2.包括大小写字母.数字.其它符号,以上四种至少三种   3.不能有相同长度超2的子串重复   说明:长度超过2的子串 知识点 ...

华为OJ-----密码验证合格程序

题目描述 密码要求:       1.长度超过8位     2.包括大小写字母.数字.其它符号,以上四种至少三种     3....

【华为OJ】【017-密码验证合格程序】

【华为OJ】【算法总篇章】【华为OJ】【017-密码验证合格程序】【工程下载】题目描述密码要求: 1.长度超过8位 2.包括大小写字母.数字.其它符号,以上四种至少三种 3.不能有相同长度超2的子串重...

密码验证合格程序(华为oj)

密码要求: 1.长度超过8位 2.包括大小写字母.数字.其它符号,以上四种至少三种 3.不能有相同长度超2的子串重复 说明:长度超过2的子串知识点 字符串,数组 运行时间限制 0M...

[华为机试练习题]31.密码验证合格程序

题目描述: 密码要求:1.长度超过8位2.包括大小写字母.数字.其它符号,以上四种至少三种3.不能有相同长度超2的子串重复说明:长度超过2的子串题目类别: 字符串,数组 难度: 中级 运行时...

【华为机试】密码验证合格程序

题目描述 密码要求: 1.长度超过8位 2.包括大小写字母.数字.其它符号,以上四种至少三种 3.不能有相同长度超2的子串重复 说明:长度超过2的子串 输入描述: 一组或多组长度超过2的...

华为机试在线训练108题:密码验证合格程序

题目描述: 密码要求: 1.长度超过8位 2.包括大小写字母.数字.其它符号,以上四种至少三种 3.不能有相同长度超2的子串重复 输入描述:一组或多组长度超过2的子符串。每组占一行; 输出描述:如果符...

Java - 华为机试训练 - 密码验证合格程序(正则表达式判断)

时间限制:1秒空间限制:32768K 本题知识点: 字符串 数组  算法知识视频讲解 题目描述 密码要求:       1.长度超过8位   ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【华为oj】密码验证合格程序
举报原因:
原因补充:

(最多只允许输入30个字)