当前位置: 首页 > news >正文

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.jsqmd.com/news/705280/

相关文章:

  • 从TTL到免拆:详解海信IP108H盒子S905L2芯片三种刷机方式的原理与选择
  • APL:几近完美的编程语言,兼具法式韵味与独特魅力!
  • 《Windows Internals》10.2.12 学习笔记:交互式服务与 Session 0 隔离——为什么现代 Windows 服务不能再直接弹窗到桌面?
  • RimSort:RimWorld模组管理的智能管家,告别模组冲突与加载混乱
  • 海口攻略新
  • Arcana:Elixir原生嵌入式RAG库,一体化智能检索与生成方案
  • 从AI智能体到PPT自动化:TrainPPTAgent项目深度解析与实践指南
  • io_uring 凭什么比 epoll 快——从共享环形缓冲区到内核线程池,拆解零拷贝提交的3层设计
  • HSTracker:macOS炉石传说智能套牌追踪器完整指南
  • Dockerfile系列(三) 多阶段构建-告别镜像obesity
  • E-Hentai漫画下载器终极教程:5步轻松批量下载完整漫画合集
  • ARM处理器预取与分支预测技术解析
  • Onekey:一键自动化获取Steam Depot清单的终极解决方案
  • 3步解锁:让任天堂控制器在Windows上重获新生的终极兼容方案
  • 天赐范式第23天:数理化炼金术公式效验器技术确权报告——原数学毒丸公式效验器升级
  • 小型语言模型(SLM)实战:高效部署与成本优化指南
  • 《Windows Internals》10.2.14 学习笔记:网络驱动器盘符通知——为什么盘符变了,系统和应用必须“知道”?
  • 线性代数在机器学习中的应用与学习资源指南
  • 2026年如何部署Hermes Agent/OpenClaw?萌新部署及token Plan配置解析
  • 使用 VS code + Oracle java 插件搭建java语言原生的notebook环境
  • 3分钟搞定OFD转PDF:免费开源神器Ofd2Pdf使用全攻略
  • [SWPUCTF 2021 新生赛]gift_F12 WP
  • Web3数据基础设施Mega:模块化架构与实战部署指南
  • AIHawk:基于Python与GPT的自动化求职智能体开发实践
  • JoyCon-Driver:让Switch手柄在Windows上重获新生的终极方案
  • Java String增删改查操作详解
  • 终极指南:用RimSort彻底解决环世界MOD管理难题,告别游戏崩溃
  • OpenClaw vs Hermes Agent
  • 2026湖南企业获客新机遇:GEO正在取代SEO,AI问答已成主战场 - 星城方舟
  • 【评测系列4】测试视角:我通宵测了 ChatGPT Image 2:100%通过背后,藏着1个危险信号