剑指 offer 笔记 49 | 把字符串转换成整数
2019-11-13 本文已影响0人
ProudLin
题目描述
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为 0 或者字符串不是一个合法的数值则返回 0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入
+2147483647
1a33
输出
2147483647
0
思路分析
只有第一个位置上的字符可以是+或-或数字,其他位置上的字符必须是数字
如果第一个字符是-,返回结果必须是负数
如果字符串只有一个字符,且为+或-,这情况很容易被忽略
在对字符串解析转换时,如果发现溢出(包括正数向负数溢出,负数向正数溢出),必须有所处理。
解释说明:
public class Solution {
public int StrToInt(String str) {
//判断输入是否合法
if(str == null || str == "" || str.equals("+") || str.equals("-"))
return 0;
int flag = 0;
long sum = 0;
char [] strArray = str.toCharArray();
for(int i=0;i<strArray.length;i++)
{
if(strArray[0] == '-' && i == 0)
{//是负数记录下来
flag = 1;
continue;
}
if(strArray[0] == '+' && i == 0)
{//是整数
continue;
}
if(!judge(strArray[i]))//判断是不是正常的数
return 0;
sum = sum * 10 + strArray[i] - '0';
}
if(flag == 1)
{
sum = sum * (-1);
if(sum < Integer.MIN_VALUE)
return 0;//判断越界没
return (int)sum;
}
if(sum > Integer.MAX_VALUE)
return 0;//判断越界没
return (int)sum;
}
private boolean judge(char ch)
{//利用ASC码,不在这个范围内的ASC码直接返回false,说明不是正常的数
int number = ch - '0';
if(number >= 0 && number <= 9)
{
return true;
}
return false;
}
}