csp信奥赛C++高频考点专项训练之字符串 --【字符统计】:密码合规
csp信奥赛C高频考点专项训练之字符串 --【字符统计】密码合规题目描述网站注册需要有用户名和密码编写程序以检查用户输入密码的有效性。合规的密码应满足以下要求 :只能由a ∼ z \texttt a \sim \texttt za∼z之间26 2626个小写字母、A ∼ Z \texttt A \sim \texttt ZA∼Z之间26 2626个大写字母、0 ∼ 9 0 \sim 90∼9之间10 1010个数字以及!#$四个特殊字符构成。密码最短长度: 6 :6:6个字符密码最大长度: 12 :12:12个字符。大写字母小写字母和数字必须至少有其中两种以及至少有四个特殊字符中的一个。输入格式输入一行不含空格的字符串。约定长度不超过100 100100。该字符串被英文逗号分隔为多段作为多组被检测密码。输出格式输出若干行每行输出一组合规的密码。输出顺序以输入先后为序即先输入则先输出。输入输出样例 1输入 1seHJ12!,sjdkffH$123,sdf!12HDHa!,123^YUhg!输出 1seHJ12! sjdkffH$123说明/提示【样例 1 解释】输入被英文逗号分为了四组被检测密码seHJ12!、sjdkffH$123、sdf!12HDHa!、123^YUhg!。其中sdf!12HDHa!长度超过 12 个字符不合规123^YUhg!包含四个特殊字符之外的字符不合规。思路分析本题要求从一行用逗号分隔的字符串中提取出多个密码然后逐个判断是否符合三条规则字符范围只能包含a~z、A~Z、0~9以及!#$四个特殊字符。长度6~12 个字符。组成种类大写字母、小写字母、数字至少包含两种并且至少包含一个特殊字符!#$。思路如下遍历字符串遇到逗号就表示一个密码结束将前面累积的tmp进行检验否则将字符追加到tmp中。循环结束后还需要检验最后一个密码因为末尾没有逗号。检验函数check中用五个标志分别记录小写字母x、大写字母d、数字sz、特殊字符f、非法字符q。遍历密码的每个字符设置相应标志。最后按照顺序判断有非法字符 → 长度不合规 → 字母数字种类不足 → 缺少特殊字符。全部通过则返回true。二、带注释的代码#includebits/stdc.husingnamespacestd;string s,tmp;// 检查密码是否合规boolcheck(string s){intx0,d0,sz0,f0,q0;// 分别标记小写、大写、数字、特殊、非法intns.size();for(inti0;in;i){if(s[i]as[i]z)x1;// 小写字母elseif(s[i]As[i]Z)d1;// 大写字母elseif(s[i]0s[i]9)sz1;// 数字elseif(s[i]!||s[i]||s[i]#||s[i]$)f1;// 合法特殊字符elseq1;// 非法字符}// 规则1不能有非法字符if(q1)returnfalse;// 规则2长度必须在6~12之间if(n6||n12)returnfalse;// 规则3大写、小写、数字至少两种if(xdsz2)returnfalse;// 规则3至少有一个特殊字符if(f0)returnfalse;// 所有规则满足returntrue;}intmain(){cins;intns.size();for(inti0;in;i){if(s[i]!,){tmps[i];// 不是逗号就继续累积}else{if(check(tmp))couttmpendl;// 遇到逗号检验前面的密码tmp;// 清空准备下一个密码}}// 最后一个密码末尾没有逗号if(check(tmp))couttmpendl;return0;}三、功能分析输入处理通过cin直接读取一行因为题目保证输入不含空格所以可以安全使用cin s。如果输入中包含空格本题没有则应该改用getline但当前代码完全满足题目要求。密码拆分手动遍历字符串以逗号为分隔符将每个密码提取到临时字符串tmp中。合规检查check函数对每个密码独立判断按照“非法字符 → 长度 → 字母数字种类 → 特殊字符”的顺序返回结果。该顺序保证了所有条件都会被检查并且效率较高单次遍历。输出按输入顺序输出所有合法的密码每行一个。【完整系列请查看专栏】信奥赛C普及组CSP-J一等奖通关刷题题单及题解https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转各种学习资料助力大家一站式学习和提升#includebits/stdc.husingnamespacestd;intmain(){cout########## 一站式掌握信奥赛知识! ##########;cout############# 冲刺信奥赛拿奖! #############;cout###### 课程购买后永久学习不受限制! ######;return0;}【秘籍汇总】完整csp信奥赛C学习资料1、csp/信奥赛C完整信奥赛系列课程永久学习https://edu.csdn.net/lecturer/7901 点击跳转2、CSP信奥赛C竞赛拿奖视频课https://edu.csdn.net/course/detail/40437 点击跳转https://edu.csdn.net/course/detail/41081 点击跳转3、csp信奥赛高频考点知识详解及案例实践CSP信奥赛C动态规划https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转CSP信奥赛C标准模板库STLhttps://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转信奥赛C提高组csp-s知识详解及案例实践https://blog.csdn.net/weixin_66461496/category_13113932.html 点击跳转4、csp信奥赛冲刺一等奖有效刷题题解信奥赛C普及组CSP-J一等奖通关刷题题单及题解https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转信奥赛C提高组csp-j初赛复赛真题题解持续更新https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转信奥赛C提高组csp-s初赛复赛真题题解持续更新https://blog.csdn.net/weixin_66461496/category_13125089.html 点击跳转5、GESP C考级真题题解GESP(C 一级二级三级)真题题解持续更新https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转GESP(C 四级五级六级)真题题解持续更新https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转GESP(C 七级八级)真题题解持续更新https://blog.csdn.net/weixin_66461496/category_13117178.html 点击跳转· 文末祝福 ·#includebits/stdc.husingnamespacestd;intmain(){cout跟着王老师一起学习信奥赛C;cout 成就更好的自己 ;cout csp信奥赛一等奖属于你! ;return0;}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2590803.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!