总结一下可能的坑:
1、字符串前后端可能有空格;
2、空串
3、字符串首个字符可能是正负号;
4、字符串中间可能有‘0’ - ‘9’之外的非法字符,如果有的话,那么只将第一个出现的非法字符之前的数字串转换为数字;
5、溢出,有正数溢出和负数溢出,所以要注意

    public static int atoi (String str) {
        // write code here

        if (str == null || str.length() == 0){
            return 0;
        }

        String s = str.trim();
        // 用于记录再字符串中非法字符出现之前的数字字符串的长度
        // 如果第一位是符号位,则

        int end = 0;

        for (int i = 0; i < s.length(); i++) {

            if (i == 0 && (s.charAt(i) == '-' || s.charAt(i) == '+')){
                continue;
            }

            if (s.charAt(i) > '9' || s.charAt(i) < '0'){
                end = i;
                break;
            }

            end = i + 1;
        }

        if (s.length() == 0 || end == 0){
            return 0;
        }

        int val = 0;
        int n  = s.length();
        int flag = s.charAt(0) == '-' ? 1 : 0;

        for (int i = 0; i < n; i++) {

            if (i == 0 && (s.charAt(i) == '-' || s.charAt(i) == '+')){
                continue;
            }

            if (s.charAt(i) <= '9' && s.charAt(i) >= '0'){

                val += (s.charAt(i) - '0') * Math.pow(10,end - i -1);
            }

        }

        if (flag == 1 && val == Integer.MAX_VALUE){
            return Integer.MIN_VALUE;
        }

        return flag == 1 ? -val : val;
    }