[原创] 大小写转换函数简化版
发表于在编程中经常会需要对字符串进行大小写的转换。
正常情况下是用两个函数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;
}
}