top1编程
← 返回题目
题解

整理药名

1 条题解

  • 0
    @ 2026-8-5 10:18:17

    解题思路

    药名格式很乱,要求统一成"第一个字母大写,其余字母都小写"。

    大小写字母转换利用 ASCII 码:大写字母 A~Z 的编码是 65~90,小写字母 a~z 的编码是 97~122,小写刚好比对应的大写大 32。

    • 小写转大写:ch = ch - 'a' + 'A'(等于 ch - 32)。
    • 大写转小写:ch = ch - 'A' + 'a'(等于 ch + 32)。

    做法:

    1. 读入药名 s,先原样输出它(第一行)。
    2. 看第 0 个字符:如果是小写字母,就转成大写。
    3. 从第 1 个字符到末尾:如果是大写字母,就转成小写。
    4. 输出处理好的药名(第二行)。

    举例:ASPIRIN → 首字符 A 本来就是大写不用动,其余 SPIRIN 全部转小写 → Aspirin。

    参考代码

    // 整理药名:首字母大写,其余字母小写,先输出原样再输出整理结果
    #include <iostream>
    using namespace std;
    int main() {
        string s;            // 混乱的药名
        cin >> s;            // 输入药名
        cout << s << endl;   // 第一行输出未整理的药名
        // 首字母:如果是小写就变成大写
        if (s[0] >= 'a' && s[0] <= 'z') s[0] = s[0] - 'a' + 'A';
        // 其余字母:如果是大写就变成小写
        for (int i = 1; i < (int)s.size(); i++)
            if (s[i] >= 'A' && s[i] <= 'Z') s[i] = s[i] - 'A' + 'a';
        cout << s << endl;   // 第二行输出整理好的药名
        return 0;
    }
    

    复杂度分析

    药名长度不超过 50。整理时从头到尾扫描一遍,每个字符处理一次。记长度为 n,时间复杂度 O(n),空间只需保存一个字符串,O(n)。

    • 1