題目描述:
將一個字符串轉換成一個整數,要求不能使用字符串轉換整數的庫函數。 數值爲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;
}
}