题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
输入
+2147483647 1a33
输出
2147483647 0
解题思路
普通的将字符串转换成数字,但是要注意正负号。
注意:判断条件要注意空字符串和溢出。
public class Solution {
public int StrToInt(String str) {
if(str.length() == 0 || str.equals("")) return 0;
char[] s1 = str.toCharArray();
int sum = 0;
boolean flag = true;
int start = 0;
if(s1[0]=='+'||s1[0]=='-')
{
start = 1;
if(s1[0]=='-')
flag = false;
}
for(int i = start;i<s1.length-1;i++ )
{
if(s1[i]<'0'||s1[i]>'9')
return 0;
sum = sum * 10 + (s1[i] - '0');
}
int dight = (int)(s1[s1.length-1]-'0');
if(flag && sum*10>Integer.MAX_VALUE - dight) //正数溢出判断
return 0;
if(!flag&& sum*10*(-1) < Integer.MIN_VALUE + dight) //负数溢出判断
return 0;
sum = sum * 10 + dight;
return flag ? sum : sum * -1;
}
}