c语言一串大写字母转小写,C语言的基础函数大小写转换
在程序中經常會需要對字母的大小寫進行轉換,雖然有現成的upper/lower函數,但是有時因為各種原因,或想減小程序的體積,需要自己編寫函數來實現。
這里來討論一下各種轉換的方法。
根據ASCII碼我們可以知道大寫字母和小寫字母相差32(20H)=100000B(二進制).
根據這個原理我們可以方便的進行大小寫的轉換。如是是大寫字母+32就變成小寫。
例子: 大寫字母’A’ 它的ASCII碼是65. ‘a’的ASCII碼是97,看下面的等式。
‘A’+32=65+32=97 = ‘a’
另外:
‘a’的二進制是01100001B
‘A’的二進制是01000001B
也就是說小寫和大寫的區別就是100000B ,也就是bit 5的區別。
所以還可以通過與運算修改bit 5的值也可以達到轉換的目的。
把第5位置為1可以按位”或”操作,置為0 可以按位”與”操作
00100000B = 32 = 20H
11011111B = 223 = DFH
‘a’ & 223 = ‘A’ ‘A’ | 32 = ‘a’
其實也就是字母的第5位(二進制位),如果它是1就是小寫的,如果是0就是大寫。
另外在使用經典的代碼比較時
小寫轉大寫 >=’a’ 并且 <=’z’
大寫轉小寫 >=’A’ 并且 <=’Z’
可以把這兩個比較的順序對換一下。
改成<=’Z’ 并且 >=’A’ ,看起來沒有什么區別,但是實際運行中效率會更高。
原理: 因為比較時,只要第一個條件不符合,那就不會去比較第二個條件了,利用這一點可以加快比較速度。
小寫字母都是大于’Z’的,當然也大于’A’。
比如轉換aBCD為小寫,a已經是小寫了,如果按原來的方法比較>=’A’ && <=’Z’ 需要比較兩次。
用后面的方法只需要比較一次。
下面是實現的代碼.有兩種方式。(轉大寫的)
void upper(char string)
{
while(string)
{
#if 0
//第一種方式比較經典的方法
if (string >='a' && string <='z')
string &= 0xDF;
#else
/*
好像網上還沒有見過這種用法,算是一個意外發現吧.
減去'a',如果它的值在0-25之前則它肯定是小寫字母。因為是無符號數.
如果這個字符小于a那會得到負數(>128)
*/
if ((unsigned char)(string - 'a') < 26)
string -= 32;
//大寫轉小寫只要把'a'改為'A',轉換的方式為`+= 32`或` |= 32`
#endif
++string;
}
return;
}
兩種不同的方式的匯編代碼比較,用經典的方法執行效率可能會高一點兒。
用新的方法生成的文件小一點(少幾個字節,在程序空間比較緊張的情況下可以用).
總結
以上是生活随笔為你收集整理的c语言一串大写字母转小写,C语言的基础函数大小写转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 随机抽样java_实现随机抽样【随机数生
- 下一篇: c语言is stack empty,C语