1. 程式人生 > >劍指offer-49:把字串轉換成整數

劍指offer-49:把字串轉換成整數

題目描述

將一個字串轉換成一個整數(實現Integer.valueOf(string)的功能,但是string不符合數字要求時返回0),要求不能使用字串轉換整數的庫函式。 數值為0或者字串不是一個合法的數值則返回0。
輸入描述:
輸入一個字串,包括數字字母符號,可以為空
輸出描述:
如果是合法的數值表達則返回該數字,否則返回0

思路

邊界條件:
資料上下 溢位
空字串
只有正負號
有無正負號
錯誤標誌輸出

程式碼

 public class Solution49 {

    enum Status {
        kValid, kInvalid
    }

    public
Status status; public int StrToInt(String str) { status = Status.kInvalid; long num = 0; if (str != null && str.length() > 0) { int minus = 1;//符號 int start = 0; char[] chars = str.toCharArray(); if (chars[0] == '+')
{ start = 1; } else if (chars[0] == '-') { start = 1; minus = -1; } for (int i = start; i < chars.length; i++) { if (chars[i] > '0' && chars[i] < '9') { num = (num <<
3) + (num << 1) + (chars[i] & 0xf); if ((minus > 0 && num > 0x7FFFFFFF) || (minus < 0 && num > 0x80000000L)) { num = 0; break; } if(i==chars.length-1) status = Status.kValid; } else { num = 0; break; } } if(status == Status.kValid) num = num * minus; } return (int) num; } public static void main(String[] args) { BeanUtil.print(new Solution49().StrToInt("123141")); BeanUtil.print(new Solution49().StrToInt("-123141")); BeanUtil.print(new Solution49().StrToInt("-2147483648")); BeanUtil.print(new Solution49().StrToInt("2147483648")); BeanUtil.print(new Solution49().StrToInt("-")); BeanUtil.print(new Solution49().StrToInt("123a41")); BeanUtil.print(new Solution49().StrToInt("-123b141")); } }