2008年10月13日星期一

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

来自"Slyar Home"的最新文章,如果您不希望再收到此邮件,请退订;如果您需要更换其它邮箱接收邮件,请点击这里

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

Mon, 13 Oct 2008 09:00:41 +0800

文章作者: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);
system("pause");
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异或即可。

返回顶部

您可以直接回复此邮件与作者联系,该服务由Feedsky提供技术支持,祝您使用愉快

没有评论: