OneCoder Avatar
OneCodercoderli.com · 958 篇博文
三级

C++ 算法考级专栏

真题分析、矩阵探测、递归回溯与基础语法

🎨 视觉封面

【GESP】C++三级练习 luogu-B2117 整理药名

📅 2025-04-03·✍️ OneCoder·计算中...·⏱️ 5 分钟
#GESP#C++#字符串

GESP三级练习,字符串练习(C++三级大纲中6号知识点,字符串),难度★★☆☆☆。

luogu-B2117 整理药名

题目要求

题目描述

医生在书写药品名的时候经常不注意大小写,格式比较混乱。现要求你写一个程序将医生书写混乱的药品名整理成统一规范的格式,即药品名的第一个字符如果是字母要大写,其他字母小写。

如将 ASPIRIN 、 aspirin 整理成 Aspirin。

输入格式

第一行一个数字 nn,表示有 nn 个药品名要整理,nn 不超过 100100

接下来 nn 行,每行一个单词,长度不超过 2020,表示医生手书的药品名。

药品名由字母、数字和 - 组成。

输出格式

nn 行,每行一个单词,对应输入的药品名的规范写法。

输入输出样例 #1

输入 #1

CONSOLE 5 行
4
AspiRin
cisapride
2-PENICILLIN
Cefradine-6

输出 #1

CONSOLE 4 行
Aspirin
Cisapride
2-penicillin
Cefradine-6

题目分析

解题思路

  1. 题目要求规范化药品名称的大小写格式。

  2. 规范化规则分析:

    • 第一个字母需要大写
    • 其余字母需要小写
    • 数字和特殊字符(如"-")保持不变
  3. 具体思路:

    • 读入药品数量n和n个药品名
    • 对每个药品名进行处理:
      • 检查第一个字符,如果是字母则转换为大写
      • 将剩余字符中的字母转换为小写
      • 数字和特殊字符保持原样
    • 输出处理后的结果
  4. 时间复杂度分析:

    • 需要遍历每个药品名的每个字符,O(n×m)O(n \times m)
    • 其中nn为药品数量,mm为药品名的最大长度
    • 空间复杂度为O(n×m)O(n \times m),需要存储nn个长度为mm的字符串

示例代码

C++ 36 行
#include <cctype>
#include <iostream>
#include <string>

int main() {
    // 读入药品名数量
    int n;
    std::cin >> n;
    // 创建数组存储输入的药品名
    std::string str_ary[n];
    // 读入所有药品名
    for (int i = 0; i < n; i++) {
        std::cin >> str_ary[i];
    }
    // 创建数组存储规范化后的药品名
    std::string out_ary[n];
    // 处理每个药品名
    for (int i = 0; i < n; i++) {
        std::string cur_str = str_ary[i];
        // 如果第一个字符是小写字母,转换为大写
        if (std::islower(cur_str[0])) {
            cur_str[0] = std::toupper(cur_str[0]);
        }
        // 将剩余字符转换为小写
        for (int j = 1; j < cur_str.length(); j++) {
            cur_str[j] = std::tolower(cur_str[j]);
        }
        // 保存规范化后的药品名
        out_ary[i] = cur_str;
    }
    // 输出所有规范化后的药品名
    for (int i = 0; i < n; i++) {
        std::cout << out_ary[i] << std::endl;
    }
    return 0;
}

💡 OneCoder 资源指引

所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI

🤝 技术交流与答疑

欢迎加入:C++ GESP/CSP 考级答疑群(688906745)Java/Python交流群(982860385),点击可直接加群。

📚

猜你想读 · 相关文章推荐

OneCoder

OneCoder (lihongzheshuai)

一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com

读者讨论与留言

0 条讨论
✨ 支持点击留言直接回复 · Markdown 引用格式
💬 还没有读者留言,快来成为第一个讨论者吧!