字符转换函数的实现
第一种方法,利用 ASCII 码大小计算
1 char mytoupper(char c)
2 {
3 if (c >= 'a' && c <= 'z')
4 {
5 c += ('A' - 'a');
6 }
7 return c;
8 }
9
10 char mytolower(char c)
11 {
12 if (c >= 'A' && c <= 'Z')
13 {
14 c += ('a' - 'A');
15 }
16 return c;
17 }
第二种方法,利用位运算
'a' - 'z': 97 - 122
'A' - 'Z': 65 - 90
'a' 与 'A' 正好相差 32 ,即 20x ,0010 0000
大写字母的范围是 0100 0001 - 0101 1010
小些字母的范围是 0110 0001 - 0111 1010
对于大写字母第 5 位都为 0
对于小些字母第 5 为都为 1
可以利用位运算的方法,即对大写字母的第 5 位进行操作,但要保持其他位不变
即利用 MASK = 0010 0000
大写 -> 小写
'a' = 'A' | (0010 0000);
小写 -> 大写
'A' = 'a' & (1101 1111);
这样做也不需要检测,如果本来就是小写,在做 或 操作时,第 5 位不变,维持 1
如果本来就是大写,在做 与操作时,第 5 位还是不变,维持 0
1 char mytoupper(char c)
2 {
3 return c & (0xDF);
4 }
5
6 char mytolower(char c)
7 {
8 return c | (0x20);
9 }
http://www.cppblog.com/qinqing1984/archive/2011/06/25/149427.html
posted on 2011-06-25 18:24
unixfy 阅读(103)
评论(0) 编辑 收藏 引用