题目:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
下面我先介绍一下自己的思路,首先我们肯定要对字符串转化成数组,然后进行过滤操作,其次一个难点是转换之后的整数可能为正数或者负数,这也需要我们进行判断的,既然可以转换成整数,说明我们输入的字符串肯定是在0-9这个区间范围,最容易忽视的一点就是我们容易漏掉整数表示范围溢出的问题。考虑好这些问题,下面我们可以先试着写一下代码
/*要点: 1. 异常输入和0输入的区分,设置一个全局变量
2. 正负号的处理
3. 溢出处理*/
public class Solution {
public int StrToInt(String str) {
//对结果的保存
int result = 0;
//对符号的标志 1 0 -1 默认为正
int symbol = 1;
//判断输入的值是否为0
boolean isValid = false;
//对传入的字符串进行转换成数组
char[] array = str.toCharArray();
if (array == null || array.length <= 0) {
return 0;
}
//如果输入第一个位为- 则更改标志为-1
if (array[0] == '-' ) {
symbol = -1;
}
//对正负号的处理需要过滤掉第一位为正负号 直接对符号进行循环前过滤
for(int i = (array[0] == '+' || array[0] == '-') ? 1 : 0; i < array.length; i++){
//对输入内容进行校验输入值不再0-9范围
if (!('0' <= array[i] && array[i] <= '9') ){
isValid = true;
return 0;
}
//对得到结果结果处理 //res=res*10+arr[i]-'0'
result = result * 10 + array[i] - '0';
//result = (result << 1) + (result <<3) + (array[i] & 0xf);
//对溢出进行判断
if ((symbol == 1 && result > Integer.MAX_VALUE) || (symbol == -1 && result < Integer.MIN_VALUE)) {
isValid = true;
return 0;
}
}
return result * symbol;
}
}