题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入
+2147483647
1a33
输出
2147483647
0
思路:遍历字符串,进行累加操作,需在此过程中判断是否存在非数字字符以及溢出现象,若溢出则返回0。
Java代码实现
public class Solution {
public int StrToInt(String str) {
if(str.length() == 0 || str == null)
return 0;
char c = str.charAt(0);
int start = 0;
if(c != '-' && c != '+')
start = 0;
else if(c == '-' || c == '+')
start = 1;
int res = 0, tmp = 0;
for(int i = start; i < str.length(); i++){
tmp = str.charAt(i) - '0';
if(tmp < 0 || tmp > 9)
return 0;
//判断是否溢出
if((c == '+' || start == 0) && Integer.MAX_VALUE - res * 10 < tmp ){return 0;}
else if(c == '-' && Integer.MIN_VALUE + res *10 > -tmp){return 0;}
res = res*10 + tmp;
}
if(c == '-'){
return -res;
}
return res;
}
}