最新消息:点击查看大S的省钱秘笈

字符串大小写互转 XOR版 C语言实现

编程相关 Slyar 140浏览 0评论

文章作者:姜南(Slyar) 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。

下午看异或运算符(XOR)时想到的这个东西,先说下作用:

当你输入"SLYar"的时候,程序会将其中的大写字母转换为小写字母,将其中的小写字母转换为大写字母,所以程序会输出"slyAR"。

#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main()
{
    int i, len;
    char str[100];
    gets(str);
    len=strlen(str);
    for (i = 0; i < len; i++)
    if (isalpha(str[i]))
    {
        str[i] ^= 32;
    }
    puts(str);
    return 0;
}

 

其中用到了一个函数isalpha(),作用是判断参数是否为英文字母。当参数为英文字母a-z或A-Z时,返回非零值,否则返回零。这个函数用到的头文件是ctype.h。

下面解释核心部分 " str[i] ^= 32; "

我们知道同一个英文字母大小写的ASCII码相差32。假设我们现在有二个字母"S"和"s",大写"S"的ASCII码为83,小写"s"的ASCII码为115,我们将32、83、115的二进制码列出来。

83   1010011
32   0100000(最低位为第一位,只有第六位是1,其他位都是0)
115 1110011

我们来回顾一下异或运算符(XOR)的特点:

与0异或时,它的值不变。
与1异或时,它的值相反。

因此,对比上面的竖式,我们可以很清楚地看到,只要将英文字母ASCII码的第6位与1异或,其他位与0异或,即可实现英文字母的大小写互换。也就是让英文字母的ASCII码与32异或即可。

转载请注明:Slyar Home » 字符串大小写互转 XOR版 C语言实现

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (11)

  1. 很不错!
    叫我王大纯3年前 (2013-07-17)回复
  2. 厉害哦
    mo3年前 (2013-07-12)回复
  3. 学习了。。。作为菜鸟。。。膜拜中。。
    seven5年前 (2011-12-30)回复
  4. 你好,我的博客perdie换域名了,新域名为www.perdie.org,麻烦修改一下友情链接中的网址,其他不变。你的链接早已添加在我的新域名博客中。
    perdie8年前 (2008-10-14)回复
  5. 直接加32 不行吗
    zonghua8年前 (2008-10-13)回复
    • 直接加32只能将大写字母转换为小写字母,而这个题要求大小写互转。。。
      Slyar8年前 (2008-10-14)回复
    • 嗯 呵呵
      zonghua8年前 (2008-10-15)回复
  6. 挺好 🙂
    Qiu Xianli8年前 (2008-10-13)回复
  7. 总结 1. XOR很NB 2. ASCII的设计很NB
    felix0218年前 (2008-10-13)回复
  8. 不错。学习了
    推背图8年前 (2008-10-13)回复