對輸入的字符進(jìn)行十六進(jìn)制轉十進(jìn)制處理
想實(shí)現的目的是:對多個(gè)(理論對字符數設的上限是1000)輸入的0(零)x或0X開(kāi)頭的十六進(jìn)制轉換為十進(jìn)制輸出。
我是分成以下幾個(gè)步驟:
1.對行輸入用數組s進(jìn)行保存。(對這種輸入處理,已經(jīng)開(kāi)始習慣先保存再處理的方式)
2.識別0x和0X標識。
3.以標識作為開(kāi)始標志,空格作為結束標志,單獨提取、計算、保存每一個(gè)輸入位,轉為十進(jìn)制存入數組u。
4.為了方便計算,把u逆順序保存為數組v(因為進(jìn)制運算低位在右,但是數組順序相反)。
5.按照(16^0)*n + (16^1)*m……的算法求出一組輸入的十進(jìn)制值(m、n為單個(gè)十六進(jìn)制數轉換成的十進(jìn)制數),余下組以循環(huán)求得。
字符轉十進(jìn)制整數基于A(yíng)SCII碼(American Standard Code for Information Interchange全稱(chēng)方便記憶):

程序




執行(為了顯示數組順序,最后一組不夠長(cháng)截圖):

總結:
1.C里面沒(méi)有^這個(gè)運算符(實(shí)際上這是“位與”的位運算),不能直接寫(xiě)16^l。必須用里面的double pow(double x, double y);來(lái)求x的y次方,但同時(shí),編譯需要加入-lm選項:
#gcc htoi.c -lm -o htoi (順序不能亂)
2.計算方法弄清楚之后,對于邏輯順序問(wèn)題,必須要寫(xiě)寫(xiě)畫(huà)畫(huà)。單憑腦子思考,很容易混亂。
3.程序里的變量名字太過(guò)簡(jiǎn)單,大程序要注意要嚴謹。還有省略了防御代碼,對非法的輸入格式?jīng)]有任何防御。
4.豬腦,用了那么多t,u,v不如用容易理解的數組名……
評論