题解
小写字母转换为大写字母
1 条题解
-
0
解题思路
题目要求把字符串里的小写字母转成大写字母,然后拼在原来字符串的后面一起输出。
首先要注意:这个字符串里可能有空格,所以不能用 cin >> s 读(cin 遇到空格就停了),要用 getline(cin, s) 读一整行。
怎么把小写字母变成大写呢?和上一题反过来:小写字母的 ASCII 码比大写字母大 32,所以小写字母减去 32 就是大写字母。例如 'a' 的码是 97,减去 32 得到 65,就是 'A'。
解题步骤:
- 用 getline 读入整行字符串 s;
- 开一个新的空字符串 up;
- 遍历 s 的每个字符:如果是小写字母就减 32 转成大写,加到 up 末尾;如果不是字母(比如空格)就原样加到 up 末尾;
- 输出 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