[原创] 大小写转换函数简化版

发表于

在编程中经常会需要对字符串进行大小写的转换。

正常情况下是用两个函数upper和lower进行转换。

其实转换的方法还是有挺多种的

比如我之前写的:C语言的基础函数大小写转换

今天再发一个合二为一的版本,一个函数可以就实现把字符串转换为大写或小写,而且代码也很简单:

说明:使用了异或运算和一些技巧

异或的运算方法是一个二进制运算:

1^1=0
0^0=0
1^0=1
0^1=1
两者相等为0,不等为1.
比如小写的'a'的ascii码为97

二进制是:01100001

它的大写’A’的ascii码为65

二进制是:01000001

由此可见大小写字母之间只是二进制第5位的区别。2的5次方=32=0x20;

使用异或运算:

01100001  ‘a'
xor
00100000   0×20
—————————
01000001  'A'

刚好是它的大写。反向计算则刚好是小写。

最终的代码如下:

/*
功能:把字符串ch全部转换为大写或小写。
flag:转换标志,必须是'a'或'A'
      'a' 转换为大写,'A',转换为小写。
来源: http://chenall.net
*/
void case_convert(char *ch,char flag)
{
    if (flag != 'a' && flag != 'A')
        return;
    while (*ch)
    {
        if ((unsigned char)(*ch-flag) < 26)
        {
            *ch ^= 0×20;
        }
        ++ch;
    }
}
希望本站内容对您有点用处,有什么疑问或建议请在后面留言评论
若无特别注明,本站内容均属原创,转载请注明作者(chenall)和出处 chenall's Blog ,请勿用于任何商业用途