实现大小写转换有两种常见思路:利用二进制位规律,或利用 ASCII 码差值规律。
方法一:利用二进制位规律
观察 ASCII 编码可以发现,大写字母与对应小写字母的编码差恰好是第 5 位(0x20)。因此,转小写只需将第 5 位置 1(与 0x20 或),转大写只需将第 5 位清零(与 0xDF 与)。
char toLower(char x)
{
if (x >= 'A' && x <= 'Z')return (x | 0x20);
return x;
}
char toUpper(char x)
{
if (x >= 'a' && x <= 'z')return (x & 0xDF);
return x;
}
方法二:利用 ASCII 码差值规律
大写字母 'A' 到 'Z' 与小写字母 'a' 到 'z' 之间存在固定的差值 'a' - 'A'(即 32)。转小写时加上该差值,转大写时减去该差值。
char toLower(char x)
{
if (x >= 'A' && x <= 'Z')return (x+ 'a'-'A');
return x;
}
char toUpper(char x)
{
if (x >= 'a' && x <= 'z')return (x - 'a' + 'A');
return x;
}