牛牛的密码


题目链接:牛牛的密码
题目来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld


题目描述

牛牛在注册不同的网站时,总是会使用不同的密码来保证他的账号安全。
为了保证他的密码强度,牛牛使用他的“字符串筛选器”来测试密码的强度。
具体来说,他先将输入的字符串筛选分成四部分。
第一部分仅由小写英文字母组成
第二部分仅由大写英文字母组成
第三部分仅由0到9的数字组成
第四部分由其余特殊字符组成
这四部分要保留它们在原字符串中的相对顺序。
比如将"1q2w3E4R5{6}“这个字符串进行筛选后
四部分分别为:“qw”、“ER”、“123456”、”{}"。
然后只要某一部分不为空,牛牛就认为他的密码等级高1级。
密码等级最低为1级,最高4级。
例如"asdA@123"的密码等级为4,"20020101"的密码等级为1。
请帮助牛牛判断他注册账号时的密码等级,以及该密码做字符串筛选后的结果。


输入描述:

仅一行一个字符串s,表示牛牛的密码。

输出描述:

首先输出一行"password level:X",X表示牛牛的密码等级,最低为1级,最高4级。
接下来输出4行,表示四部分的筛选结果,输出时要注意保留它们在原字符串中的相对顺序,如果某一部分为空串,则改为在该行输出"(Null)"。


示例

示例1
输入

123456

输出

password level:1
(Null)
(Null)
123456
(Null)

示例2
输入

Pass_Word

输出

password level:3
assord
PW
(Null)

备注:

对于20%20%的测试数据,保证仅有小写英文字母组成,且1≤∣s∣≤100
对于40%40%的测试数据,保证仅有大小写英文字母组成,且1≤∣s∣≤100
对于100%的测试数据,保证字符串是不含空格、回车、或者其他不可见字符的非空字符串,且保证字符串长度1≤∣s∣≤10000


算法思路

将密码读入后,枚举密码每一位并把每一位
按照小写英文字母,大写英文字母,数字,其余特殊字符分类,
并将这为字符装进分别表示这四种类型的数组里

if(s[i]>='a'&&s[i]<='z')
	sa[la++]=s[i];
else{
	if(s[i]>='A'&&s[i]<='Z')
		sA[lb++]=s[i];
	else{
		if(s[i]>='0'&&s[i]<='9')
			s1[lc]=s[i];
		else{
		ss[ld++]=s[i];}

以上代码则将四种类型字符分类完毕!
然后可以用:

bool a,b,c,d;

来判定这四种类型是否出现过,
出现过则 a n s + + ; ans++; ans++
否则这种没出现过的类型的数组直接等于 “ ( N u l l ) ” “(Null)” (Null)

char k[10]="(Null)";
for(int j=0;j<=5;j++)
	sa[j]=k[j];

AC 代码

#include<iostream>
#include<cstring>
using namespace std;
char s[1001],sa[1001],sA[1001],s1[1001],ss[1001],k[10]="(Null)";
long long i,ans,la,lb,lc,ld;
bool a,b,c,d;
int main(){
	cin>>s;
	for(i=0;i<strlen(s);i++){
		if(s[i]>='a'&&s[i]<='z'){
			sa[la]=s[i];
			la++;
			a=1;
		}else{
			if(s[i]>='A'&&s[i]<='Z'){
				sA[lb]=s[i];
			lb++;
				b=1;
			}else{
				if(s[i]>='0'&&s[i]<='9'){
					s1[lc]=s[i];
			lc++;
					c=1;
				}else{
					ss[ld]=s[i];
			ld++;
					d=1;
				}
			}
		}
	}if(a)
	ans++;
	else
	{
		for(int j=0;j<=5;j++){
			sa[j]=k[j];
		}
	}
	if(b)
	ans++;
	else
	{
		for(int j=0;j<=5;j++){
			sA[j]=k[j];
		}
	}
	if(c)
	ans++;
	else
	{
		for(int j=0;j<=5;j++){
			s1[j]=k[j];
		}
	}
	if(d)
	ans++;
	else
	{
		for(int j=0;j<=5;j++){
			ss[j]=k[j];
		}
	}
	cout<<"password level:"<<ans<<endl<<sa<<endl<<sA<<endl<<s1<<endl<<ss;
	
} 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值