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

题目:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为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;
    }
}

猜你喜欢

转载自blog.csdn.net/baidu_34168157/article/details/78634860