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

密码要求:

1.长度超过8位

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

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

bool funJGM(string test){
	int len = test.length();
	int index[4] = { 0 };//0数字,1大写,2小写,3其他符号

	if(len>8){
		for (int i = 0; i < len; ++i){
			if (isalnum(test[i])){ if(index[0]==0)index[0]=1; }
			 if (islower(test[i])){ if (index[2] == 0)index[2]=1; }
			 if (isupper(test[i])){ if (index[1] == 0)index[1]=1; }
			 if (!isalnum(test[i]) && !islower(test[i]) && !isupper(test[i])){ if (index[3] == 0) index[3] = 1; }
		}
		if (index[0] + index[1] + index[2] + index[3] >= 3){return true; }
		else{ return false; }
	}
	else return false;
}
int funJGMpro(string test){
	int len = test.length();
	int Maxed = 0,count = 0;
	int st1, st2;
	for (int i = 0; i < len; ++i){
		for (int j = i + 1; j < len; ++j){
			st1 = i; st2 = j;
			while (test[st1] == test[st2] && st1 < len&&st2 < len)
			{
				++count; ++st1; ++st2;
			}
			if (count > Maxed)
				Maxed = count;
			count = 0;
		}
	}
	return Maxed;
}
void HWoj(){
	string test = "021abc900DD";
	if (funJGM(test) && (funJGMpro(test) <= 2))cout << "OK\n";
	else cout << "NG\n";
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值