劍指offerNo49. 把字符串轉換成整數(Java)

題目描述:

將一個字符串轉換成一個整數,要求不能使用字符串轉換整數的庫函數。 數值爲0或者字符串不是一個合法的數值則返回0

輸入一個字符串,包括數字字母符號,可以爲空
如果是合法的數值表達則返回該數字,否則返回0

輸入:

+2147483647
    1a33

輸出:

2147483647
    0

思路:

首先,補充知識點: 字符串減'0'位整數。比如:字符'1' - '0' = 1(int類型)。因爲在我們的計算機裏面,字符在計算機中都以各自的ASCII表示。'1'在計算機裏面是49,'0'是48,那麼'1' - '0' =49-48 = 1,得到的就是整型的1。 

代碼:

package offer01;

public class TestNo49 {
    static boolean isValid = false;
    public static void main(String[] args) {
        String a = "-2147483649";
        System.out.println(new TestNo49().StrToInt(a));
    }
    public int StrToInt(String str) {
        if(str == null || str.length()<=0)
            return 0;
        char[] chars = str.toCharArray();
        long num=0;  //先用long來存儲,以防止越界
        boolean minus=false;
        for(int i=0; i<chars.length; i++){
            if(i==0 && chars[i]=='-'){
                minus=true;
            }else if(i==0 && chars[i]=='+'){
                minus=false;
            }else{
                int a=(int) (chars[i]-'0');
                if(a<0 || a>9){
                    isValid=false;
                    return 0;
                }
                num= (minus==false) ? num*10+a : num*10-a;
                isValid=true;  //不放在最後面是爲了防止str=‘+’的情況被判斷爲true
                if((!minus && num>0x7FFFFFFF)
                        ||(minus && num<0x80000000)){
                    isValid=false;
                    return 0;
                }
            }
        }
        return (int)num;
    }
}

不要着急,因爲總會有人熬夜陪你 下雨接你 說我愛你 好的總是壓箱底  ..

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