链接:https://ac.nowcoder.com/acm/contest/7604/A
来源:牛客网
来源:牛客网
牛牛在注册不同的网站时,总是会使用不同的密码来保证他的账号安全。
为了保证他的密码强度,牛牛使用他的“字符串筛选器”来测试密码的强度。
具体来说,他先将输入的字符串筛选分成四部分。
第一部分仅由小写英文字母组成
第二部分仅由大写英文字母组成
第三部分仅由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)
题目大意:统计纯大写,纯小写,纯数字,纯其他字符的字符串
思路:模拟,不过也有技巧可以可以减少代码量
1.使用C++函数判别数字、小写、大写字母、其他字符
2.字符串'\0'封直接puts输出
AC代码
#include<bits/stdc++.h> using namespace std; char s[10004],di[10004],lo[10004],up[10004],ot[10004]; int main() { int cn1=0,cn2=0,cn3=0,cn4=0,b1=0,b2=0,b3=0,b4=0; scanf("%s",s); int ls=strlen(s); for(int i=0;i<ls;++i) { if(islower(s[i])) lo[cn1++]=s[i],b1=1; else if(isupper(s[i])) up[cn2++]=s[i],b2=1; else if(isdigit(s[i])) di[cn3++]=s[i],b3=1; else ot[cn4++]=s[i],b4=1; } lo[cn1]='\0'; up[cn2]='\0'; di[cn3]='\0'; ot[cn4]='\0'; printf("password level:%d\n",b1+b2+b3+b4); if(cn1) puts(lo); else puts("(Null)"); if(cn2) puts(up); else puts("(Null)"); if(cn3) puts(di); else puts("(Null)"); if(cn4) puts(ot); else puts("(Null)"); }