坑好多

将字符串转化为整数

http://www.nowcoder.com/questionTerminal/44d8c152c38f43a1b10e168018dcc13f

总结一下可能的坑:
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;
    }
全部评论

相关推荐

11-13 20:16
已编辑
厦门理工学院 软件测试
专业嗎喽:硕佬,把学校背景放后面几段,学校背景双非还学院,让人看了就不想往下看。 把实习经历和个人奖项放前面,用数字化简述自己实习的成果和掌握的技能,比如负责项目一次通过率90%,曾4次发现项目潜在问题风险为公司减少损失等等
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务