作者james732 (好人超)
站内C_and_CPP
标题Re: [问题] 大小写转换
时间Mon Feb 23 23:42:14 2009
http://zh.wikipedia.org/wiki/ASCII
在ASCII编码里,小写总是会比大写还要大
也就是说,如果 ch >= 'a' 的话,那它一定是小写了
如果是小写,就先减掉'a',得知它是小写的第几个字
譬如说 'b'-'a' 就会得到 1
然後再加上 'A',换算成第几个大写字
刚刚的例子里, 'A'+1 = 'B' 就得到了
大写也是一样的道理
可以更进一步写成
ch = (ch >= 97) ? (ch - 32) : (ch + 32);
用常数来替代,看起来更简洁,但会比较不直觉 XDD
刚刚看到推文有 ch ^= 0x20 用 XOR 运算
这个方法就更厉害了 XDD
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.104.62.38
※ 编辑: james732 来自: 59.104.62.38 (02/23 23:45)
1F:推 kobe123:请问ch不用写成'ch'吗,还是都可以 02/23 23:52
2F:推 QQ29:ch是变数名称唷 你写成'ch' 还不会给你过... 02/23 23:53
3F:推 kobe123:对喔@@我是好奇读近的自元可以直接作加减 02/23 23:55
4F:→ kobe123:目前手边没书,我明天再查书复习一下,感谢帮忙 02/23 23:56
5F:→ ilway25:给qq.. 'ch' >= 'a' 会过,而且是永远成立吧xd 02/24 00:01
6F:→ james732:g++会给:warning: multi-character character constant 02/24 00:04
7F:→ james732:不过确实会过 我还以为 ' ' 只能放一个字元而已 XDD 02/24 00:06
8F:推 QQ29:喔喔不过VC会说什麽截断 他干麻给过呢= = 02/24 00:20
9F:推 TroyLee:我说的那个应该是蚂蚁书上面的范例还是作业有出现 02/24 00:46
10F:→ james732:哦哦 没有仔细看过蚂蚁书...(惭愧中) 02/24 00:46
11F:推 ledia:^0x20 只能用在 input 全是英文字母时 02/24 11:48