您的位置:首页 > Web前端

剑指offer----将字符串转化成整数

2017-11-25 22:38 246 查看
题目:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  字符串