剑指Offer:把字符串转换成整数

题目

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。

思路

先去掉前后空格,然后对符号位做一下判断就很简单了。需要注意的是进行判断上溢和下溢的情况。
这里比较坑的一点是java的整型字面值字面值默认是int类型,因此0x80000000等于-2147483648,与long进行比较的时候会类型提升,然而这并不改变其符号位,依然是-2147483648。因此必须要在字面值后面加上一个L显式地将其定义为long类型。

代码:

public class Solution {
    public int StrToInt(String str) {
        str = str.trim();
        if(str.length()==0)
            return 0;
        boolean isNeg = false;
        long value=0;
        for(int i=0;i<str.length();i++){
            char cur = str.charAt(i);
            if(cur>='0'&&cur<='9'){
                value=value*10+cur-'0';
                if(isNeg&&value>0x80000000L||
                !isNeg&&value>0x7fffffffL)
                    return 0;
            }
            else{
                if(i==0&&cur=='+')
                    isNeg=false;
                else if(i==0&&cur=='-')
                    isNeg=true;
                else
                    return 0;
            }
        }
        return (int)(isNeg?-1*value:value);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章