
























GESP C++三级,2026年6月真题,字符大小写转换与数字替换,难度⭐,洛谷难度入门。
小杨同学有一串字符,里面可能有:
- 大写字母,比如 $A$、$B$、$C$
- 小写字母,比如 $a$、$b$、$c$
- 数字,比如 $0$、$1$、$2$
现在小杨同学想把这串字符变一变,规则如下:
- 如果是大写字母,就变成对应的小写字母;
- 如果是小写字母,就变成对应的大写字母;
- 如果是数字,就变成
*。请你按照这个规则,帮小杨把整串字符转换好。
输入一共有 $2$ 行。
第一行:一个整数,表示这串字符一共有多少个字符。
第二行:一串连续的字符,中间没有空格。
输出转换后的字符。
注意:输出时字符之间不要加空格。
原来的字符是 aBc98,从左到右依次转换:$a \to A$,$B \to b$,$c \to C$,$9 \to *$,$8 \to *$。最终输出 AbC**。
字符个数不超过 $1000$ 个。每个字符只会是大写字母、小写字母或数字。
本题的解题思路如下:
*'A' 到 'Z'),转小写可加 $32$,或使用 tolower() 函数'a' 到 'z'),转大写可减 $32$,或使用 toupper() 函数'0' 到 '9'),直接替换为 '*'isupper()、islower()、isdigit() 等标准库函数进行判断利用大写字母与小写字母的 ASCII 码相差 $32$ 的特性,通过加减 $32$ 完成大小写互换。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <string>
int main() {
// 读入字符个数
int n;
std::cin >> n;
// 读入字符串
std::string s;
std::cin >> s;
// 逐字符判断并转换
for (int i = 0; i < n; i++) {
char c = s[i];
if (c >= 'A' && c <= 'Z') {
// 大写字母转小写:ASCII 码加 32
std::cout << (char)(c + 32);
} else if (c >= 'a' && c <= 'z') {
// 小写字母转大写:ASCII 码减 32
std::cout << (char)(c - 32);
} else {
// 数字字符替换为 '*'
std::cout << '*';
}
}
std::cout << std::endl;
return 0;
}
利用 isupper()、islower() 判断字符类型,toupper()、tolower() 完成大小写转换,代码更简洁易读。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <string>
#include <cctype>
int main() {
// 读入字符个数
int n;
std::cin >> n;
// 读入字符串
std::string s;
std::cin >> s;
// 逐字符判断并转换
for (int i = 0; i < n; i++) {
char c = s[i];
if (isupper(c)) {
// 大写字母转小写
std::cout << (char)tolower(c);
} else if (islower(c)) {
// 小写字母转大写
std::cout << (char)toupper(c);
} else {
// 数字字符替换为 '*'
std::cout << '*';
}
}
std::cout << std::endl;
return 0;
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP 学习专题站:GESP WIKI
"luogu-"系列题目可在洛谷题库进行在线评测。
"bcqm-"系列题目可在编程启蒙题库进行在线评测。
欢迎加入:Java、C++、Python技术交流QQ群(982860385),大佬免费带队,有问必答
欢迎加入:C++ GESP/CSP认证学习QQ频道,考试资源总结汇总
欢迎加入:C++ GESP/CSP学习交流QQ群(688906745),考试认证学员交流,互帮互助
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。