C语言字母大小写互换的简单方法

来源:互联网 发布:知乎周刊第一本 编辑:程序博客网 时间:2024/06/05 17:26

字母的大小写互换其实很简单

回到最基本的数据的存储形式,从八位二进制角度去看大写字母和小写字母,你会发现它们的低四位是相同的,高四位有细微差别。


举例:

ASCII DEC BIN ‘A’ 65 01000001 ‘a’ 97 01100001 ‘B’ 66 01000010 ‘b’ 98 01100010 ‘X’ 88 01011000 ‘x’ 120 01111000

仔细观察 发现是第六位不同!

大小写互换的方法

  • 考虑到低四位完全相同 只用互换高四位的第六位就可以实现大小写互换
  • 互换高四位的某一位而不改变低四位,我们联想到位运算中的按位异或^ 关于按位异或 详见按位异或

  • 由按位异或的知识,我们可以寻找一个数,使得任意的一个八位二进制数与它进行异或操作后,高四位的第六位01取反,低四位不变

  • 回顾我们的目标 假如把'A'变为'a' 我们需要把01000001变为01100001,也就是把第六位的0变为1

  • 我们找到这个数了!它的二进制是00100000 十进制是32

  • 01000001^00100000=01100001,是不是很神奇?同理把小写字母'a'变为'A'也只需要把它与32进行按位异或操作就可以啦~


#include<stdio.h>int main(){    int i;    char s[100];    //读入字符串    gets(s);    for(i=0;s[i]!='\0';i++)    {        if((s[i]>='A'&&s[i]<='Z')||(s[i]>='a'&&s[i]<='z'))        s[i]^=32;//核心语句,实现字符串中字母的大小写互换    }    printf("%s",s);    return 0;}

样例输入->

Hello,Java!

样例输出->

hELLO,jAVA!

有没有很神奇呢!

欢迎关注我的博客 后续慢慢加入新内容,谢谢!

我的博客主页