GESP2026年6月认证C++三级( 第三部分编程题(2、字符转换))精讲



🏰《字符王国大冒险》

------大小写魔法师


一、故事开始

1、一天,小杨来到了一座神奇的城堡。

城堡里住着三种居民。

👑 第一种:

大写字母国

复制代码
A B C D E ...

🌸 第二种:

小写字母国

复制代码
a b c d e ...

⭐ 第三种:

数字国

复制代码
0 1 2 3 4 ...

2、一天,魔法师宣布:

"所有居民都要变身!"

规则非常简单:


魔法规则①

如果是:

复制代码
A

变成:

复制代码
a

如果:

复制代码
Z

变成:

复制代码
z

也就是说:

大写全部变小写。


魔法规则②

如果:

复制代码
b

变成:

复制代码
B

如果:

复制代码
x

变成:

复制代码
X

也就是:

小写全部变大写。


魔法规则③

如果是数字:

复制代码
3

变成:

复制代码
*

例如:

复制代码
9

↓

*

数字全部消失!


最后输出新的字符串。

这就是这道题。


二、样例分析

1、例如输入:

复制代码
5
aBc98

(1)第一个数字:

复制代码
5

表示:

共有5个字符。


(2)输入需要处理的字符串:

复制代码
aBc98

(3)我们一个一个来看。

第一个:

复制代码
a

属于:

小写字母。


所以:

复制代码
a

↓

A

第二个:

复制代码
B

属于:

大写字母。


所以:

复制代码
B

↓

b

第三个:

复制代码
c

↓

C

第四个:

复制代码
9

数字。


所以:

复制代码
9

↓

*

第五个:

复制代码
8

↓

*

最后得到:

复制代码
AbC**

和样例完全一致。


三、字符其实就是数字!

1、一个重要的知识点。

计算机眼里:

字母其实也是数字!


2、例如:

(1)大写字母:

复制代码
'A'

65

(2)小写字母

复制代码
'a'

97

(3)数字:

复制代码
'0'

48

......


四、大写和小写到底差多少?

码值差距是固定的:

所有英文字母,大写和小写永远相差32!

这是ASCII码最重要的规律之一。

考试经常出现。

一定记住!


五、怎么变?

1、大写转小写

复制代码
'A'

65

加上32。

复制代码
65+32 = 97

就是:

复制代码
'a'

所以:

大写变小写:

复制代码
c+32

或者:

复制代码
c+('a'-'A')

2、反过来,小写转大写

小写:

复制代码
'a'

97

减去:

复制代码
32

得到:

复制代码
65

就是:

复制代码
'A'

所以:

复制代码
c-('a'-'A')
c-32

六、如何判断字符是大写、小写和数字?

告诉大家一个技巧。

1、ASCII码里面:

所有大写字母都是连续排列。

复制代码
A B C D ...

65

66

67

...

2、所以:

判断:

复制代码
'A'<=c && c<='Z'

是不是很方便


3、同理:

小写:

复制代码
'a'<=c && c<='z'

范围也有了


4、数字:

复制代码
'0'<=c && c<='9'

这次都全了


七、程序应该怎么写?

我们来看下整个流程。


1、第一步

输入:

复制代码
5

表示:

长度。


2、第二步

输入:

复制代码
aBc98

放进:

复制代码
char s[];

里面。

现在:

复制代码
下标

0 1 2 3 4

里面:

复制代码
a

B

c

9

8

3、第三步

开始循环。

复制代码
for(...)

每次拿一个字符。

例如第一次:

复制代码
c=s[0]

得到:

复制代码
a

4、判断:

(1)是不是:

复制代码
'a'<=c&&c<='z'

成立。

说明:

是小写。

输出:

复制代码
c-('a'-'A')

得到:

复制代码
A

(2)第二次

拿:

复制代码
B

判断:

是不是:

复制代码
'A'<=c&&c<='Z'

成立。

于是:

输出:

复制代码
c+('a'-'A')

得到:

复制代码
b

(3)第三次。

拿:

复制代码
9

前两个条件都不满足。

说明:

一定就是数字。

输出:

复制代码
'*'

整个程序就结束了。


八、完整代码

复制代码
#include <iostream>
using namespace std;

char s[1010];

int main()
{
    int n;
    cin >> n;

    cin >> s;

    for(int i=0;i<n;i++)
    {
        char c=s[i];

        if('a'<=c && c<='z')
        {
            cout<<(char)(c-('a'-'A'));
        }
        else if('A'<=c && c<='Z')
        {
            cout<<(char)(c+('a'-'A'));
        }
        else
        {
            cout<<'*';
        }
    }

    cout<<endl;

    return 0;
}

九、为什么一定要强制转换(char)?

1、有的同学都会问:

为什么这里写:

复制代码
(char)

2、例如:

复制代码
cout<<(char)(c+32);

(1)为什么?

因为:

复制代码
c+32

结果已经不是char。


(2)而是:

复制代码
int

(3)例如:

复制代码
'A'

65

加32以后。


(4)得到:

复制代码
97

(5)如果直接:

复制代码
cout<<97;

输出的是:

复制代码
97

而不是:

复制代码
a

(6)所以:

需要告诉编译器:

"请把97重新看成字符。"


(7)于是:

复制代码
(char)97

(8)输出:

复制代码
a

十、这道题真正考察什么?


第一层:字符数组或者string

能够输入:

复制代码
char s[1010];

能够循环访问:

复制代码
s[i]

第二层:ASCII码

知道:

复制代码
'A'

↓

65

'a'

↓

97

知道:

复制代码
相差32

第三层:字符分类

学会利用字符的连续编码进行范围判断:

复制代码
'A'<=c&&c<='Z'

'a'<=c&&c<='z'

'0'<=c&&c<='9'

这是以后几乎所有字符串题都会反复使用的技巧。


十一、举一反三

学会这道题后,你已经能够解决很多类似的问题:

🌟 把所有字母变成大写(统一大小写)

🌟 统计字符串中有多少个大写字母、小写字母和数字

🌟 判断一个密码是否符合要求(是否包含大小写字母和数字)

🌟 实现简单的字符加密与解密(如凯撒密码)

🌟 编写文本格式转换程序(如 Markdown、编译器预处理等)


🎯 本题知识总结

知识点 是否重点 为什么重要
char 字符数组 ⭐⭐⭐⭐⭐ 存储字符串的基础
s[i] 遍历字符串 ⭐⭐⭐⭐⭐ 几乎所有字符串题都会使用
ASCII 编码 ⭐⭐⭐⭐⭐ 理解字符本质
'a' - 'A' ⭐⭐⭐⭐⭐ 大小写转换最规范的方法
范围判断 'A'<=c<='Z' ⭐⭐⭐⭐⭐ 字符分类的经典技巧
if / else if / else ⭐⭐⭐⭐☆ 根据不同字符执行不同操作
(char) 强制类型转换 ⭐⭐⭐⭐☆ 保证输出字符而不是整数

🌈 汉克老师的小建议

这道题虽然代码只有十几行,但它把三级字符串入门的重要知识点全部串联了起来:

字符就是数字(ASCII) → 利用连续编码判断字符类型 → 利用编码差值完成大小写转换 → 循环遍历整个字符串。

真正理解了这四步,以后使用 string、文本处理、字符串算法时,就会轻松很多。