對於這個問題,
本題考查的實際上就是字串轉換成整數的問題,或者說是要你自行實現atoi函式。那如何實現把表示整數的字串正確地轉換成整數呢?以」345」作為例子:
當我們掃瞄到字串的第乙個字元』3』時,由於我們知道這是第一位,所以得到數字3。
當掃瞄到第二個數字』4』時,而之前我們知道前面有乙個3,所以便在後面加上乙個數字4,那前面的3相當於30,因此得到數字:3*10+4=34。
繼續掃瞄到字元』5』,』5』的前面已經有了34,由於前面的34相當於340,加上後面掃瞄到的5,最終得到的數是:34*10+5=345。
因此,此題的思路便是:每掃瞄到乙個字元,我們便把在之前得到的數字乘以10,然後再加上當前字元表示的數字。
需要注意的問題:「由於整數可能不僅僅之含有數字,還有可能以』+』或者』-『開頭,表示整數的正負。因此我們需要把這個字串的第乙個字元做特殊處理。如果第乙個字元是』+』號,則不需要做任何操作;如果第乙個字元是』-『號,則表明這個整數是個負數,在最後的時候我們要把得到的數值變成負數。
接著我們試著處理非法輸入。由於輸入的是指標,在使用指標之前,我們要做的第一件是判斷這個指標是不是為空。如果試著去訪問空指標,將不可避免地導致程式崩潰。
另外,輸入的字串中可能含有不是數字的字元。每當碰到這些非法的字元,我們就沒有必要再繼續轉換。
最後乙個需要考慮的問題是溢位問題。由於輸入的數字是以字串的形式輸入,因此有可能輸入乙個很大的數字轉換之後會超過能夠表示的最大的整數而溢位。」
其實最先開始我是採用迴圈的方式進行的,
int strtoint(char *str)
return number;
}
這是最初的乙個想法,在我們遇到這個情況了以後,我們作為程式設計的人,應該考慮各種邊界測試,各種的異常狀況!!!
比如上面這個程式,如果我們的字串所需要輸出的是帶+123456或者是帶-132456?那麼是否還會正常的輸出呢?還有,如果我所給的字串為空字串呢?
所以考慮多種情況:
我們寫出下面的**:
#include
#include
#include
long
long transform(char *str)
//判斷空格問題
while (isspace(*str))
//-情況
if (*str == '-')
//+情況
else
if (*str=='+')
//考慮進製的問題
if (*str == '0' && (*(str + 1) == 'x' || *(str + 1) == 'x'))//十六進製制
else
if(*str == '0')//八進位制
else
//十進位制
while (*str)
else
}else
str++;
}return num*flag;
}int main()
在這裡我擴充套件了下功能,可以使得程式進行8進製,16進製制還有10進製的轉換,在這裡我們得到的提示是,在程式設計中,要有良好的程式設計習慣,全面進行考慮。 劍指offer 字串轉換為整數
在c語言中,有乙個函式我們可能不經常使用,那就是字串轉換為整數函式 atoi atoi 表示 ascii to integer 是把字串轉換成整型數的乙個函式 atoi 函式會掃瞄引數 nptr字串,跳過前面的空白字元 例如空格,tab縮排等,可以通過isspace 函式來檢測 直到遇上數字或正負符...
劍指offer 把字串轉換為整數
題目要求 將乙個字串轉換成乙個整數,要求不能使用字串轉換整數的庫函式。數值為0或者字串不是乙個合法的數值則返回0。這道題的難點在於溢位判斷,但令人遺憾的是溢位的算例似乎取消了,不進行溢位判斷依然能通過除錯。本文的解決方案未進行溢位判斷。這道題比較簡單,先看第乙個元素是正負號還是數字,確定標誌位。然後...
劍指Offer (字串)把字串轉換成整數
題目鏈結 題目描述 將乙個字串轉換成乙個整數 實現integer.valueof string 的功能,但是string不符合數字要求時返回0 要求不能使用字串轉換整數的庫函式。數值為0或者字串不是乙個合法的數值則返回0。輸入描述 輸入乙個字串,包括數字字母符號,可以為空 輸出描述 如果是合法的數值...