大小写转换,大小写转换的秘密

要求:将一串字符中的大写字母(或者小写字母)全部转换为小写字母(或者大写字母)
很显然我们会想到通过大小写字母ASCII的区别,然后用if else判断后,在进行转换,代码如下:
#include int main(int argc, char *argv[]) { int i; char a[6] = "BasIc"; char b[6] = "MiniX"; for(i = 0;i<5;i++) { if((a[i] >= 97) && (a[i] <= 122)) a[i] = a[i] - 32; if((b[i] >= 65) && (b[i] <= 90)) b[i] = b[i] + 32; } printf("%s\n%s",a,b); return 0; }
但是想想这样是不是太慢了呢?又或者如果我们要求不适用if语句,那又该怎么办呢?
我们看看大小写字母ASCII对应的二进制
A 100,0001 a 110,0001
B 100,0010 b 110,0010
C 100,0011 c 110,0011
… …
Z 101,1010 z 111,1010
得到答案了吧!!
大写字母的第5位(从0位开始)全部是0,而小写字母的第5位全是1,其实它们的差值为32 = 25 就是这个道理。。。
所以我们的程序可以这样改
#include int main(int argc, char *argv[]) { int i; char a[6] = "BasIc"; char b[6] = "MiniX"; for(i = 0;i<5;i++) { a[i] &= ~(1<<5);//全部 转化为大写 b[i] |= (1<<5);//全部 转化为小写 } printf("%s\n%s",a,b); return 0; }
只需要对第5位进行置0、置1操作就可以了,O(∩_∩)O~,简单吧
Tags: 

延伸阅读

最新评论

发表评论