4315: 密码合规检测(GESP 23年6月 3级 第二题)

题目描述

网站注册需要有用户名和密码,编写程序以检查用户输入密码的有效性。合规的密码应满足以下要求:

1、只能由a-z之间26个小写字母、A-Z之间26个大写字母、0-9之间10个数字以及!@#$四个特殊字符构成。

2、密码最短长度:6个字符,密码最大长度:12个字符。

3、大写字母、小写字母和数字必须至少有其中两种,以及至少有四个特殊字符中的一个。

输入格式

输入一行不含空格的字符串。约定长度不超过100。该字符串被英文逗号分隔为多段,作为多组被检测密码。

输出格式

输出若干行,每行输出一组合规的密码。

输出顺序以输入先后为序,即先输入则先输出。

样例输入content_copy

seHJ12!@,sjdkffH$123,sdf!@&12HDHa!,123&^YUhg@!

样例输出content_copy

seHJ12!@
sjdkffH$123

提示/说明

输入被英文逗号分为了四组被检测密码:“seHJ12!@”、“sjdkffH$123”、“sdf!@&12HDHa!”、“123&^YUhg@!”。其中,“sdf!@&12HDHa!”长度超过12个字符,不合规;“123&^YUhg@!”包含四个特殊字符之外的字符“^”,不合规。

#include<bits/stdc++.h>
using namespace std;
bool array_y[1010];
int main(){
	string s;
	int cnt1=0,cnt2=0,cnt3=0,cnt4=0,cnt5=0,cnt6_2=0,cnt6_1=0;
	cin>>s;
	int len=s.size();
	for(int i=0;i<=len-1;i++){
		if(s[i]>='A'&&s[i]<='Z'){
			cnt1=1;
			cnt6_2++;
		}
		else if(s[i]>='a'&&s[i]<='z'){
			cnt2=1;
			cnt6_2++;
		}
		else if(s[i]=='!'||s[i]=='@'||s[i]=='#'||s[i]=='$'){
			cnt3++;
			cnt6_2++;
		}
		else if(s[i]>='0'&&s[i]<='9'){
			cnt4=1;
			cnt6_2++;
		}
		else if(s[i]==','){
			if(cnt5==0&&cnt3>0&&cnt1+cnt2+cnt4>=2&&cnt6_2-cnt6_1>=6&&cnt6_2-cnt6_1<=12){
				for(int j=cnt6_1;j<=cnt6_2-1;j++){
					cout<<s[j];
				}
//cout<<cnt6_2<<" "<<cnt6_1<<" "<<i;
				cout<<endl;
			}
			cnt1=0;
			cnt2=0;
			cnt3=0;
			cnt4=0;
			cnt6_2++;
			cnt6_1=cnt6_2;
			cnt5=0;
		}else{
			cnt5++;
			cnt6_2++;
		}
	}
	if(cnt5==0&&cnt3>0&&cnt1+cnt2+cnt4>=2&&cnt6_2-cnt6_1>=6&&cnt6_2-cnt6_1<=12){
		for(int j=cnt6_1;j<=cnt6_2-1;j++){
			cout<<s[j];
		}
		//cout<<cnt6_2<<" "<<cnt6_1<<" "<<i;
		cout<<endl;
	}
    return 0;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值