




🏰《字符王国大冒险》
------大小写魔法师
一、故事开始
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、文本处理、字符串算法时,就会轻松很多。