劍指offer-49:把字串轉換成整數
阿新 • • 發佈:2018-12-18
題目描述
將一個字串轉換成一個整數(實現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"));
}
}