好久沒寫博了,準備繼續搞起。今天先寫個簡單的,字母的大小寫轉換。
問題1:給定乙個字串「asdfghj」,把它全部轉為大寫字母或者小寫字母。
這問題是不是太簡單了點,現有的各種函式庫裡面都有什麼strtoupper()、strtolower()之類的轉換函式。自己手寫乙個呢?
這讓我想起以前上機實驗寫c程式的時候做過這個題。好吧,先寫下當時我是怎麼做的:
void strtoupper( char *str,int len)
}
}
看起來很簡單吧,就是首先計算一下大小寫字母之間的差距 'a'-'a',然後針對每個字母判斷是否是小寫字母,是的話就轉為大寫字母。strtolower也是一樣的道理。
問題2:在問題1加個條件,不得使用判斷語句,進行字母的大小寫轉換,這該怎麼做呢?
嗯,其實這是我在看彙編的時候看到的乙個解法,看下原書的截圖:
從圖中可以發現,其實大小寫字母的二進位制表示中,只有1個二進位制的差別,也就是第5個二進位制位不一樣(從0開始計數)。
這下就更簡單多了,小寫字母轉換為大寫字母,其實也就是把第5個二進位制位置為0即可,即:
小寫轉大寫: str & 11011111b => str &0xdf
大寫轉小寫: str | 00100000b => str | 0x20
這樣**就更加簡單高效了。
void strtoupper( char *str,int len){
int i;
for(i=0;i
不過,這個做法顯然要求str是由字母組成的,要是有其它字元,還是得用判斷。
字母大小寫轉換
這道題其實很簡單,有好幾種做法。我們都知道大寫字母a z的編碼是65 90,小寫字母的編碼a z是97 112。首先先看這張 由圖中的 可以觀察得出 很直觀可以看出,大寫字母和小寫字母的ascii碼值相差32 通過仔細觀察相應的二進位制,可以得出大寫字母和小寫字母二進位制的第5位 從右往左從0開始數...
js字母大小寫轉換
tolocaleuppercase 方法 返回乙個字串,其中所有的字母字元都被轉換為大寫,同時適應宿主環境的當前區域設定。stringvar.tolocaleuppercase 必選的 stringvar 引用是乙個 string 物件,值或文字。說明tolocaleuppercase 方法轉換字串...
c 字母大小寫轉換
今天突然有了點空閒時間,又剛好看到乙個需要轉換字母大小寫的問題,於是就來這裡聊一下 首先,我們要知道可行的轉換方法 一 ascall碼 使用ascall碼轉換的原理是乙個字母的大小寫ascall碼之差為32.因此大致思路為先判斷大小寫,再進行相應的 32 includeusing namespace...