大小写转换

在算法竞赛中,我们经常会遇到英文字母大小写转换的问题,下面我们就来具体介绍一下如何解决这个问题。

1.利用ASCII码转换

在python中有直接查看ASCII码的函数ord(),和将ASCII转化位字符的函数chr(),而我们知道大写字母和小写字母的ASCII码的数值相差32。因此我们可以利用这一点完成转化。

1
2
3
#小写转大写
a=input("输入小写字母:")
print(chr(ord(a)-32))
1
2
3
#大写转小写
a=input("输入大写字母:")
print(chr(ord(a)+32))

在C++中也有类似的函数,std::tolower和std::toupper。

此外,字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCII编码放入到储存单元,所以我们可以将字符强转成整形数。我们也可利用这一点完成转换。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{

char ch1 = 'a';
char ch2 = 'A';

cout << int(ch1) << endl; //将字符强转成整形数,也就是我们能看懂的十进制数
cout << char(int(ch1)-32) << endl; //转换为相应字符
cout << int(ch2) << endl;
cout << char(int(ch2)+32) << endl;

return 0;
}

下面附上ASCII码:

ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符
0 NUL 32 (space) 64 @ 96
1 SOH 33 ! 65 A 97 a
2 STX 34 66 B 98 b
3 ETX 35 # 67 C 99 c
4 EOT 36 $ 68 D 100 d
5 ENQ 37 % 69 E 101 e
6 ACK 38 & 70 F 102 f
7 BEL 39 , 71 G 103 g
8 BS 40 ( 72 H 104 h
9 HT 41 ) 73 I 105 i
10 LF 42 * 74 J 106 j
11 VT 43 + 75 K 107 k
12 FF 44 , 76 L 108 l
13 CR 45 - 77 M 109 m
14 SO 46 . 78 N 110 n
15 SI 47 / 79 O 111 o
16 DLE 48 0 80 P 112 p
17 DCI 49 1 81 Q 113 q
18 DC2 50 2 82 R 114 r
19 DC3 51 3 83 S 115 s
20 DC4 52 4 84 T 116 t
21 NAK 53 5 85 U 117 u
22 SYN 54 6 86 V 118 v
23 TB 55 7 87 W 119 w
24 CAN 56 8 88 X 120 x
25 EM 57 9 89 Y 121 y
26 SUB 58 : 90 Z 122 z
27 ESC 59 ; 91 [ 123 {
28 FS 60 < 92 \ 124 |
29 GS 61 = 93 ] 125 }
30 RS 62 > 94 ^ 126 `
31 US 63 ? 95 _ 127 DEL

2.利用位运算和空格字符

在ASCII码中,英文字母对应的二进制的第六位表示大小写,该位为0时表示大写,为1时表示小写。$2^6=32$,空格的ASCII码又恰好为32。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{

char c = 'a';
if(c&' ') //判断是否为小写
if(~c&' ') //判断是否为大写
c|=' '; //转换为小写,相当与std::tolower
c^=' '; //如果原本是大写,转换为小写,原本是小写转换为大写
c=(c|' ')^' '; //转换为大写字母,等价于std::toupper

return 0;
}

大小写转换
https://serendipity565.github.io/posts/f80237d83af1/
作者
Serendipity
发布于
2024年2月13日
许可协议
BY-SERENDIPITY565