GESP2023年6月认证C++三级( 第三部分编程题(2、密码合规检测))
一、 故事背景守护密码之门在魔法学院门口有一扇超级智能大门。它会检查每个进入的人的密码♂️“只有符合规则的密码才能进去”否则❌ “不合格禁止进入”二、 密码规则大门的要求每个密码必须满足 规则1字符合法只能包含✔ 小写字母 a~z✔ 大写字母 A~Z✔ 数字 0~9✔ 特殊字符! # $❌ 其他字符比如 ^、直接淘汰 规则2长度限制6 ≤ 长度 ≤ 12太短 ❌太长 ❌ 规则3种类要求必须满足 至少有两种类型大写字母小写字母数字 并且必须有至少一个特殊字符!#$ 输入长什么样输入是一整行abc123!,HELLO12$,bad^pwd,Ok1! 用逗号分隔多个密码我们要一个一个检查三、️ 解题思路 第一步把字符串“切开”像切香肠一样遇到 , 就分成一个密码 第二步检查每个密码我们写一个“守卫函数”bool check(char *str, int len) 第三步逐个字符分析就像安检一样if (A c Z) → 大写 if (a c z) → 小写 if (0 c 9) → 数字 if c 是 !#$ → 特殊字符 否则 ❌ 不合法 第四步记录“身份”我们用4个开关hasC // 大写 hasL // 小写 hasD // 数字 hasS // 特殊字符 第五步最终判断必须 ✔ 有特殊字符 ✔ 至少两种大写/小写/数字 ✔ 长度合法 ✔ 没有非法字符四、 参考代码#include iostream using namespace std; char line[101]; char pwd[101]; // 检查密码是否合法 bool check(char *str, int l) { if (l 6 || l 12) return false; bool hasC false, hasL false, hasD false, hasS false; for (int i 0; str[i] ! \0; i) { if (A str[i] str[i] Z) { hasC true; } else if (a str[i] str[i] z) { hasL true; } else if (0 str[i] str[i] 9) { hasD true; } else if (str[i] ! || str[i] || str[i] # || str[i] $) { hasS true; } else { return false; // 出现非法字符 } } if (!hasS) return false; if (hasC hasL hasD 2) return false; return true; } int main() { cin line; int len 0; for (int i 0; line[i] ! \0; i) { if (line[i] ! ,) { pwd[len] line[i]; } else { pwd[len] \0; if (check(pwd, len)) cout pwd endl; len 0; } } // 最后一个密码 if (len 0) { pwd[len] \0; if (check(pwd, len)) cout pwd endl; } return 0; }五、 举例加深理解1、输入seHJ12!,sjdkffH$123,sdf!12HDHa!,123^YUhg!2、分析密码结果seHJ12!✔ 合法sjdkffH$123✔ 合法sdf!12HDHa!❌ 太长123^YUhg!❌ 有非法字符 ^3、输出seHJ12! sjdkffH$123六、 知识点总结✨ 字符串拆分逗号分割✨ 字符分类判断✨ 多条件验证✨ 函数封装✨ 模拟真实系统
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2557419.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!