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

题目描述

密码要求:

 

 

 

1.长度超过8位

 

 

2.包括大小写字母.数字.其它符号,以上四种至少三种

 

 

3.不能有相同长度超2的子串重复

 

 

说明:长度超过2的子串


输入描述:

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

输出描述:

如果符合要求输出:OK,否则输出NG

示例1

输入

021Abc9000
021Abc9Abc1
021ABC9000
021$bc9000

输出

OK
NG
NG
OK
实现代码如下:

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

int main()
{
	string s,temp;
	while(cin>>s)
	{
		int len=s.size();
		if(len<=8)
		   cout<<"NG"<<endl;
		else
		{
			int i=0,cnt1=0,cnt2=0,cnt3=0,cnt4=0;
			for(i=0;i<len;i++)
			{
				if(s[i]>='0'&&s[i]<='9')
				   cnt1=1;
				else if(s[i]>='A'&&s[i]<='Z')
				   cnt2=1;
				else if(s[i]>='a'&&s[i]<='z')
				   cnt3=1;
				else
				   cnt4=1;
			}
			if(cnt1+cnt2+cnt3+cnt4<3)
			    cout<<"NG"<<endl;
			else
			{
				//判别是否有长度超过2的子串重复
				int i=0,j=0;
		        int flag=0;
		        for(i=0;i<len;i++)
		        {
			         for(j=3;i+j<len;j++)
			         {
				         temp=s.substr(i,j);
				         string::size_type idx=s.find(temp,i+j+1);//这个地方是关键 
				         if(idx!=string::npos)
				         {
				        	flag=1;//表示找到相同子串 
				        	break;
				         }	
				         else
				         {
				         	//flag=0;
				        	continue;
				         }
				    
			         }
			         if(flag==1)
			         {
				          cout<<"NG"<<endl;
			           	  break;
			         }
		        }
		        if((i==len)&&(flag==0))
		        cout<<"OK"<<endl; 
			}
		}
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值