LeetCode0008-string转int

同样是一道美团测开算法题,重点考察边界值、异常场景的覆盖(白盒测试思维)

考点:

异常、特殊场景的覆盖,如:特殊字符、空格、int范围

char转int

//字符串转整数
//https://leetcode-cn.com/problems/string-to-integer-atoi/
//重点考察 基本数据类型的转化、边界值
public class Num008_StringToNumber {

    public static int myAtoi(String s) {
        char[] result = s.toCharArray();
        int length = s.length();
        int i = 0;
        int flag = 1;
        int ans = 0;
//        去空格
        while (i < length && result[i] == ' ') {
            i++;
        }
        // 这里是,如果空格都去掉之后,i大于长度,会发生数组越界->这个自己没有想到
        if (i >= length) return 0;

        if (result[i] == '-') {
            flag = -1;
            i++;
        } else if (result[i] == '+') {
            flag = 1;
            i++;
        } else if (!Character.isDigit(result[i])) {
            return 0;
        }

        for (; i < s.length(); i++) {
            if (Character.isDigit(result[i])) {
                int num = result[i] - '0';
                // 本来应该是 ans * 10 + digit > Integer.MAX_VALUE
                // 但是 *10 和 + digit 都有可能越界,所有都移动到右边去就可以了。
                if (ans > (Integer.MAX_VALUE - num) / 10) {
                    return ans = flag == -1 ? Integer.MIN_VALUE : Integer.MAX_VALUE;
                }
                ans = ans * 10 + num;
            } else return ans;

        }
        return flag * ans;
    }


    public static void main(String[] args) {
        String s = "3.14";
        int result = myAtoi(s);
        System.out.println(result);
        System.out.println(Character.isDigit('.'));
        System.out.println(Integer.MAX_VALUE);

    }
}

 

posted on 2021-06-29 22:45  cStream  阅读(70)  评论(0)    收藏  举报