news 2026/7/5 3:35:45

题解:洛谷 B4556 [GESP202606 三级] 字符转换

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
题解:洛谷 B4556 [GESP202606 三级] 字符转换

【题目来源】

洛谷:B4556 [GESP202606 三级] 字符转换 - 洛谷

【题目描述】

小杨同学有一串字符,里面可能有:

  • 大写字母,比如A AAB BBC CC
  • 小写字母,比如a aab bbc cc
  • 数字,比如0 001 112 22

现在小杨同学想把这串字符变一变,规则如下:

  1. 如果是大写字母,就变成对应的小写字母;
  2. 如果是小写字母,就变成对应的大写字母;
  3. 如果是数字,就变成*

请你按照这个规则,帮小杨把整串字符转换好。

【输入】

输入一共有2 22行。

第一行:一个整数,表示这串字符一共有多少个字符。

第二行:一串连续的字符,中间没有空格。

【输出】

输出转换后的字符。

注意:输出时字符之间不要加空格。

【输入样例】

5 aBc98

【输出样例】

AbC**

【核心思想】

  1. 问题分析:给定长度为n nn的字符串S SS,需要对每个字符进行分类转换:大写字母→ \to小写字母、小写字母→ \to大写字母、数字→ \to*。本质是字符级别的条件映射问题,根据字符的 ASCII 属性执行不同的转换规则。

  2. 算法选择

    • 逐字符分类转换:遍历字符串,利用字符分类函数islower()isupper()isdigit()判断类型,调用对应的大小写转换函数或替换为*
    • 原地修改:直接在原字符串上修改,无需额外空间
  3. 关键步骤

    • 读取输入n nn(字符串长度)和S SS
    • 遍历转换:对S SS的每个字符S i S_iSi
      • islower(S_i)为真:S i ← S_i \leftarrowSitoupper(S_i)(小写转大写)
      • 否则若isupper(S_i)为真:S i ← S_i \leftarrowSitolower(S_i)(大写转小写)
      • 否则:S i ← S_i \leftarrowSi*(数字等字符替换)
    • 输出结果:输出转换后的字符串S SS
  4. 时间/空间复杂度

    • 时间复杂度:O ( n ) O(n)O(n),遍历字符串一次,每个字符的分类和转换均为O ( 1 ) O(1)O(1)
    • 空间复杂度:O ( 1 ) O(1)O(1)(除输入字符串外),原地修改无需额外辅助空间
  5. 字符分类转换的核心思想

    • 类型三分支:将字符集划分为互斥的三个子集(小写字母、大写字母、其他),每个子集对应唯一的转换规则,通过if-else if-else链实现清晰的分支逻辑
    • ASCII 码运算touppertolower内部基于 ASCII 码的固定偏移(小写与大写相差32 3232)实现O ( 1 ) O(1)O(1)转换,也可手动通过S[i] ^= 32(仅对字母)实现
    • 原地覆盖策略:直接在原字符串上修改,避免创建新字符串带来的额外空间开销,符合"转换"而非"生成"的语义
    • 防御性编程:使用islower/isupper而非直接比较 ASCII 范围,代码可读性更强且能正确处理扩展字符集(尽管本题限定为字母和数字)
    • 适用于字符级别的条件替换、大小写互换、符号过滤等基础字符串处理问题

【算法标签】

#入门 #字符串入门

【代码详解】

#include<bits/stdc++.h>usingnamespacestd;intn;// n: 字符串长度string s;// s: 需要转换的字符串intmain(){cin>>n>>s;// 读入字符串长度和字符串本身for(inti=0;i<s.size();i++)// 遍历字符串中的每个字符{if(islower(s[i]))// 如果是小写字母s[i]=toupper(s[i]);// 转换为对应的大写字母elseif(isupper(s[i]))// 如果是大写字母s[i]=tolower(s[i]);// 转换为对应的小写字母else// 如果是数字等其他字符s[i]='*';// 替换为 '*'}cout<<s<<endl;// 输出转换后的字符串return0;}

【运行结果】

5 aBc98 AbC**
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/5 3:34:27

第一线 DYXnet:海外企业跨境网络建设,为什么更需要“云网安”一体化服务商?

随着中国企业出海节奏加快&#xff0c;海外办公室、海外工厂、跨境电商团队、国际物流网络和多区域业务系统正在成为企业数字化运营的新常态。对这些企业而言&#xff0c;跨境网络不再只是“能访问总部系统”的基础设施&#xff0c;而是直接影响业务效率、客户响应、数据安全和…

作者头像 李华
网站建设 2026/7/5 3:32:48

CountDownLatch 实现精准的并发控制

CountDownLatch 实现精准的并发控制 概述 本文档详细分析并发启动场景&#xff08;赛跑模式&#xff09;中两个 CountDownLatch 的作用和阻塞关系。代码示例 import java.util.concurrent.CountDownLatch;public class RaceStartDemo {public static void main(String[] args) …

作者头像 李华
网站建设 2026/7/5 3:31:58

商用烤盘定制厂家正规机构

做过烘焙供应链的都懂&#xff0c;商用烤盘是直接影响生产效率和产品品质的核心工具&#xff0c;尤其是有定制需求的食品加工厂、中央厨房&#xff0c;找对正规的烘焙器具定制厂家&#xff0c;能避开后续不少麻烦&#xff1a;比如定制尺寸和产线不匹配卡炉、用两三个月就变形翘…

作者头像 李华
网站建设 2026/7/5 3:31:22

从 OC 平滑迁移 Swift 完整方案

前言&#xff1a;重构不是推倒重来&#xff0c;是技术债务的有序偿还 对于大多数运行了5年以上的iOS大型项目来说&#xff0c;几十万行Objective-C代码沉淀了无数业务逻辑、边缘场景和经过亿级用户验证的稳定逻辑。直接全量重写为Swift的项目几乎无一例外都陷入了工期无限延期…

作者头像 李华
网站建设 2026/7/5 3:29:58

VIbe Coding时期,推送项目惹众宾欢也

在进行 vibe coding 时&#xff0c;容易在项目推送环节翻车&#xff0c;比如大家常调侃的将 API 密钥推送到仓库的情况。本文就为大家讲清楚 DeepSeek API 如何安全推送。摘要&#xff1a;本文详细介绍了在 vibe coding 过程中如何安全地将项目推送到 GitHub&#xff0c;避免泄…

作者头像 李华
网站建设 2026/7/5 3:29:01

小红书数据采集终极指南:Python xhs库完整实战教程

小红书数据采集终极指南&#xff1a;Python xhs库完整实战教程 【免费下载链接】xhs 基于小红书 Web 端进行的请求封装。https://reajason.github.io/xhs/ 项目地址: https://gitcode.com/gh_mirrors/xh/xhs 在当今社交媒体数据分析领域&#xff0c;小红书作为中国领先的…

作者头像 李华