top1编程
← 返回题目
题解

小写字母转换为大写字母

1 条题解

  • 0
    @ 2026-8-5 16:07:42

    解题思路

    题目要求把字符串里的小写字母转成大写字母,然后拼在原来字符串的后面一起输出。

    首先要注意:这个字符串里可能有空格,所以不能用 cin >> s 读(cin 遇到空格就停了),要用 getline(cin, s) 读一整行。

    怎么把小写字母变成大写呢?和上一题反过来:小写字母的 ASCII 码比大写字母大 32,所以小写字母减去 32 就是大写字母。例如 'a' 的码是 97,减去 32 得到 65,就是 'A'。

    解题步骤:

    1. 用 getline 读入整行字符串 s;
    2. 开一个新的空字符串 up;
    3. 遍历 s 的每个字符:如果是小写字母就减 32 转成大写,加到 up 末尾;如果不是字母(比如空格)就原样加到 up 末尾;
    4. 输出 s 和 up 拼在一起的结果。

    参考代码

    // P4592 小写字母转换为大写字母:小写转大写后拼接在原字符串后面
    #include <iostream>
    using namespace std;
    
    int main() {
        string s, up;              // s 存原串,up 存转换后的大写串
        getline(cin, s);           // 可能有空格,必须用 getline 读整行
        for (int i = 0; i < (int)s.size(); i++) {
            char c = s[i];
            if ('a' <= c && c <= 'z') c -= 32;  // 小写字母减 32 变成大写
            up += c;               // 把转换后的字符拼到 up 后面
        }
        cout << s << up << endl;   // 原串 + 大写串
        return 0;
    }
    

    复杂度分析

    字符串的长度不超过 500。程序把每个字符处理一遍,时间大约是 O(n),其中 n 是原字符串的长度。额外开了一个长度不超过 n 的字符串 up 来存转换结果,空间是 O(n)。

    • 1