劍指Offer之把字符串轉換成整數

題目描述:

寫一個函數 StrToInt,實現把字符串轉換成整數這個功能。不能使用 atoi 或者其他類似的庫函數。
說明:
假設我們的環境只能存儲 32 位大小的有符號整數,那麼其數值範圍爲 [−231, 231 − 1]。如果數值超過這個範圍,請返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。

思路分析:
去掉字符串左邊的空格,然後從頭往後遍歷,如果第一位爲+或者-,往後遍歷,如果遇到非數字,結束循環,如果是數字,將數字記錄下來。

注意:本題難點在於如何處理溢出問題。

int範圍爲:-2^31 ~2^31-1,即 -2147483648 ~2147483647,如果用int類型的數字num判斷肯定會出錯,因爲超過int類型大小的數字由於溢出,溢出後的值肯定小於最大值,導致沒法判斷。這裏可以通過判斷數字num和Integer.MAX_VALUE / 10的值來確定是否溢出。


參考代碼:

 public int strToInt(String str) {
   if(str == null || str.length() == 0)return 0;
   int i = 0;
   while(i < str.length() && str.charAt(i) == ' ')i++;
   if(i >= str.length())return 0;
   int flag = 1;
   if(str.charAt(i) == '-')flag = -1;
   if(str.charAt(i) == '-' || str.charAt(i) == '+')i++;
   int res = 0;
   while(i < str.length()){
      if(str.charAt(i) < '0' || str.charAt(i) > '9')break;
      if(res > Integer.MAX_VALUE / 10 || res == Integer.MAX_VALUE / 10 && str.charAt(i) > '7')return flag == -1 ? Integer.MIN_VALUE : Integer.MAX_VALUE;
      res = res * 10 + str.charAt(i) - '0';
      i++;
   }
   return flag * res;
 }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章