牛牛的密码
牛牛的密码
https://ac.nowcoder.com/acm/contest/7604/A
题目链接:https://ac.nowcoder.com/acm/problem/212986
到主站看:https://blog.csdn.net/weixin_43346722/article/details/109140850
题目
牛牛在注册不同的网站时,总是会使用不同的密码来保证他的账号安全。
为了保证他的密码强度,牛牛使用他的“字符串筛选器”来测试密码的强度。
具体来说,他先将输入的字符串筛选分成四部分。
第一部分仅由小写英文字母组成
第二部分仅由大写英文字母组成
第三部分仅由 到
的数字组成
第四部分由其余特殊字符组成
这四部分要保留它们在原字符串中的相对顺序。
比如将 "1q2w3E4R5{6}" 这个字符串进行筛选后
四部分分别为:"qw"、"ER"、"123456"、"{}"。
然后只要某一部分不为空,牛牛就认为他的密码等级高 级。
密码等级最低为 级,最高
级。
例如 "asdA@123" 的密码等级为 ,"20020101" 的密码等级为
。
请帮助牛牛判断他注册账号时的密码等级,以及该密码做字符串筛选后的结果。
输入
仅一行一个字符串 ,表示牛牛的密码。
输出
首先输出一行 "password level:X", 表示牛牛的密码等级,最低为
级,最高
级。
接下来输出 行,表示四部分的筛选结果,输出时要注意保留它们在原字符串中的相对顺序,如果某一部分为空串,则改为在该行输出 "(Null)"。
样例输入1
123456
样例输出1
password level:1 (Null) (Null) 123456 (Null)
样例输入2
Pass_Word
样例输出2
password level:3 assord PW (Null) _
数据范围
对于 的测试数据,保证仅有小写英文字母组成,且
对于 的测试数据,保证仅有大小写英文字母组成,且
对于 的测试数据,保证字符串是不含空格、回车、或者其他不可见字符的非空字符串,且保证字符串长度
。
思路
这道题就是一道模拟题。
就把一个字符串拆成四个部分,分别就是上面的四种。
就直接一个一个枚举字符,然后看是哪一个部分的,然后就放过去。
最后按要求输出就可以了。
考试时
看到题目:啊?哦。
然后就打完交上去跑了。。。
得分: 分
代码
#include<cstdio> #include<cstring> using namespace std; char r[10001], a[10001], b[10001], c[10001], d[10001]; int lev, hav[4]; int main() { scanf("%s", &r); for (int i = 0; i < strlen(r); i++) { if (r[i] >= 'a' && r[i] <= 'z') { if (!hav[0]) lev++; a[++hav[0]] = r[i]; continue; } if (r[i] >= 'A' && r[i] <= 'Z') { if (!hav[1]) lev++; b[++hav[1]] = r[i]; continue; } if (r[i] >= '0' && r[i] <= '9') { if (!hav[2]) lev++; c[++hav[2]] = r[i]; continue; } if (!hav[3]) lev++; d[++hav[3]] = r[i]; } printf("password level:%d\n", lev); for (int i = 0; i < 4; i++) { if (!hav[i]) printf("(Null)\n"); else { if (i == 0) { for (int j = 1; j <= hav[i]; j++) printf("%c", a[j]); printf("\n"); continue; } if (i == 1) { for (int j = 1; j <= hav[i]; j++) printf("%c", b[j]); printf("\n"); continue; } if (i == 2) { for (int j = 1; j <= hav[i]; j++) printf("%c", c[j]); printf("\n"); continue; } for (int j = 1; j <= hav[i]; j++) printf("%c", d[j]); printf("\n"); } } return 0; }