题解:洛谷 P5704 字母转换
【题目来源】
【题目描述】
输入一个小写字母,输出其对应的大写字母。例如输入 \(q\)[回车] 时,会输出 \(Q\)。
【输入】
无
【输出】
无
【输入样例】
q
【输出样例】
Q
【核心思想】
-
问题分析:输入一个小写字母,输出其对应的大写字母。利用 ASCII 码表中大小写字母的固定偏移关系进行转换。
-
算法选择:
- ASCII 码偏移:小写字母
'a'~'z'的 ASCII 码为 \(97 \sim 122\),大写字母'A'~'Z'为 \(65 \sim 90\),两者差值为 \(32\)
- ASCII 码偏移:小写字母
-
关键步骤:
- 读入字符:
cin >> xiao读取小写字母 - 转换计算:
da = xiao - 'a' + 'A'xiao - 'a'得到该字母在字母表中的偏移量(\(0 \sim 25\))- 加上
'A'的 ASCII 码,得到对应大写字母
- 输出结果:
cout << da
- 读入字符:
-
时间/空间复杂度:
- 时间复杂度:\(O(1)\),单次算术运算
- 空间复杂度:\(O(1)\),仅需两个字符变量
-
字符转换的核心思想:
- ASCII 码连续性:大小写字母在 ASCII 表中各自连续排列,偏移量恒定
- 相对位置映射:通过减去基准字符
'a'得到相对索引,再加到基准字符'A'上实现映射 - 等价写法:
xiao - 32或xiao - 'a' + 'A'或toupper(xiao)均可实现转换 - 适用于字符编码转换、大小写处理类入门问题
【算法标签】
入门 #模拟
【代码详解】
#include <bits/stdc++.h> // 包含标准库头文件(万能头文件)
using namespace std; // 使用标准命名空间
/**
* 主函数 - 程序入口
* @return 程序执行状态码(0表示成功)
*/
int main()
{
char xiao, da; // 定义两个字符变量:xiao(小写字母), da(大写字母)
cin >> xiao; // 从标准输入读取一个小写字母
da = xiao - 'a' + 'A'; // 将小写字母转换为对应大写字母
// 计算原理:利用ASCII码差值进行大小写转换
// 'a'-'a'=0, 0+'A'='A'
// 'b'-'a'=1, 1+'A'='B'
// 以此类推...
cout << da; // 输出转换后的大写字母
return 0; // 返回程序执行成功状态码
}
【运行结果】
q
Q
浙公网安备 33010602011771号