题解:洛谷 P5704 字母转换

【题目来源】

洛谷:P5704 【深基2.例6】字母转换 - 洛谷

【题目描述】

输入一个小写字母,输出其对应的大写字母。例如输入 \(q\)[回车] 时,会输出 \(Q\)

【输入】

【输出】

【输入样例】

q

【输出样例】

Q

【核心思想】

  1. 问题分析:输入一个小写字母,输出其对应的大写字母。利用 ASCII 码表中大小写字母的固定偏移关系进行转换。

  2. 算法选择

    • ASCII 码偏移:小写字母 'a'~'z' 的 ASCII 码为 \(97 \sim 122\),大写字母 'A'~'Z'\(65 \sim 90\),两者差值为 \(32\)
  3. 关键步骤

    • 读入字符cin >> xiao 读取小写字母
    • 转换计算da = xiao - 'a' + 'A'
      • xiao - 'a' 得到该字母在字母表中的偏移量(\(0 \sim 25\)
      • 加上 'A' 的 ASCII 码,得到对应大写字母
    • 输出结果cout << da
  4. 时间/空间复杂度

    • 时间复杂度:\(O(1)\),单次算术运算
    • 空间复杂度:\(O(1)\),仅需两个字符变量
  5. 字符转换的核心思想

    • ASCII 码连续性:大小写字母在 ASCII 表中各自连续排列,偏移量恒定
    • 相对位置映射:通过减去基准字符 'a' 得到相对索引,再加到基准字符 'A' 上实现映射
    • 等价写法xiao - 32xiao - '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
posted @ 2026-08-05 15:46  团爸讲算法  阅读(18)  评论(0)    收藏  举报