(基础)单个字符的大小写转换
我们知道,英文字母是分大小写的,下面我们需要编写一个简单的程序,将输入的全部小写字母变换为大写字母,大写字母变换为小写字母,非写字母保持不变。
输入:
一个字符
输出:
变换后的字符
样例:
序号 | 测试输入 | 期待的输出 | 额外进程 |
---|---|---|---|
1 | A↵ | a↵ | 0 |
2 | Z↵ | z↵ | 0 |
3 | b↵ | B↵ | 0 |
4 | y↵ | Y↵ | 0 |
5 | #↵ | #↵ | 0 |
流程图
代码
#include <stdio.h>
int main()
{
char in;
in = getchar();
if('A'<=in&&in<='Z')
{
in = in + 32;
printf("%c\n",in);
}
else if('a'<=in&&in<='z')
{
in = in - 32;
printf("%c\n",in);
}
else
{
printf("%c\n",in);
}
return 0;
}
课外思考
还没有更“优雅”的方式呢?
观察大小写字母的二进制ASCII码:
字母 | ASCII |
---|---|
A | 01000001 |
a | 01100001 |
B | 01000010 |
b | 01100010 |
··· | ······ |
显然,所有的小写的第五位是1,所有的大写字母的第五位都是0,其实本质就是
(
32
)
10
=
(
1000000
)
2
(32)_{10}=(1000000)_{2}
(32)10=(1000000)2。
所以,无论是大写字母还是小写字母,只要将第五位取反就可以实现”大小写转换“,而这可以通过异或操作实现。
代码
#include <stdio.h>
#include <string.h>
int main()
{
char in;
in = getchar();
in ^=32;
printf("%c",in);
}