云计算百科
云计算领域专业知识百科平台

L1-023 输出 GPLT - 20分

🚀 序章

大家好!继续打卡天梯赛 L1 系列习题,这次带来的是 L1-023 输出 GPLT。这道题聚焦字符筛选、计数与指定规则重组,是字符串处理的入门经典题,非常适合练手基础逻辑。作为从 C 语言转向 C++ 的新手,我用纯 C、基础 C++ 两种方式实现,代码都保留简洁注释,方便理解,和备战天梯赛的同学们一起交流。

📖 题目分析

1. 题目要求

给定一个长度不超过 10000 的、仅由英文字母构成的字符串,按以下规则处理:

  • 只保留 G/g、P/p、L/l、T/t 四种字符,忽略其余所有字符;
  • 按照 GPLTGPLT…… 的循环顺序输出;
  • 若某一种字符已输出完毕,剩余字符仍按 G→P→L→T 的顺序打印,直到所有有效字符输出完成。
  • 2. 输入输出格式

    • 输入:一行,长度不超过 10000 的非空英文字符串
    • 输出:一行,按规则重组后的字符串,题目保证输出非空

    3. 输入输出样例

    输入:

    plaintext

    pcTclnGloRgLrtLhgljkLhGFauPewSKgt

    输出:

    plaintext

    GPLTGPLTGLTGLGLL

    4. 核心解题思路

  • 字符筛选:遍历字符串,只识别 G、P、L、T 及其小写形式,其余跳过;
  • 统计数量:分别统计四种字符的总个数,不区分大小写;
  • 循环输出:按照 G→P→L→T 的固定顺序,每轮依次检查,有剩余就输出并计数减一,直到所有计数为 0。
  • 💡 带注释多解法实现

    解法 1:纯 C 语言实现(基础高效,适合初学)

    解法 2:基础 C++ 实现(简洁易读,现代风格)

    🧠 关键思路拆解

    1. 输入存储与读取

    • C 语言:使用固定长度字符数组,需手动预留结束符空间,用scanf读取、strlen获取长度,是 C 风格字符串的标准操作;
    • C++:使用string容器,无需关心长度和越界,getline可读取整行,代码更简洁,安全性更高。

    2. 不区分大小写统计

    核心是用逻辑或||同时判断大小写,将同一字符的大小写形式归为一个计数器。C 用数组集中管理计数,C++ 用独立变量,新手更容易对应字符和计数,两种方式时间复杂度均为 O (n),效率一致。

    3. 循环输出核心逻辑

    循环条件是四个计数器不全为 0,保证所有字符都被输出。每一轮循环严格按照 G→P→L→T 的顺序判断,仅当计数器 > 0 时才输出并自减,自然实现 “用完即停、顺序不变” 的效果,是本题的核心考点。

    4. C 与 C++ 写法对比

    特性纯 C 写法基础 C++ 写法
    字符串类型 字符数组char[] 字符串类string
    遍历方式 下标 for 循环 范围 for 循环,语法更简洁
    计数方式 数组count[4]统一管理 独立变量,直观易读
    输入输出 scanf/printf cin/cout,代码更精简
    新手友好度 高,贴合基础语法 高,代码可读性更强

    📝 学习小结

  • 这类字符筛选 + 计数 + 重组的题目,先统计后输出是最高效的思路,避免多次遍历字符串;
  • 不区分大小写的判断,是字符处理题的常见考点,牢记用||同时匹配大小写;
  • 按固定顺序循环输出,通过 “轮询检查 + 计数自减” 实现,逻辑清晰且易调试;
  • C 和 C++ 核心逻辑完全一致,差异集中在字符串和语法糖上,新手可先掌握 C 版本,再过渡到更简洁的 C++ 写法;
  • 易错点:计数变量未初始化、顺序写错、大小写判断遗漏,写代码时可逐一核对。
  • 赞(0)
    未经允许不得转载:网硕互联帮助中心 » L1-023 输出 GPLT - 20分
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!