美文网首页
把字符串转换成整数

把字符串转换成整数

作者: 囧略囧 | 来源:发表于2020-02-17 10:49 被阅读0次

    题目描述

    将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
    输入描述:
    输入一个字符串,包括数字字母符号,可以为空
    输出描述:
    如果是合法的数值表达则返回该数字,否则返回0
    示例1
    输入
    +2147483647
    1a33
    输出
    2147483647
    0

    这道题目逻辑较简单,但是明显考察的是各种边界条件、特殊用例。包括:
    1、长度溢出
    2、整型的上溢出与下溢出
    3、非法字符(非数字字符)
    4、带正负号的字符串
    5、仅有正负号的字符
    6、输入为null
    7、空字符串""

    下面是自己AC掉的代码,由于牛客讨论区未见到考虑周全代码,故不做整理

    public class Solution {
        public int StrToInt(String str) {
            long result = 0;
            //虽然使用long型保存result,最后进行截断得int,但即使是long甚至longlong都有可能溢出,
            //所以必须对位数长度进行控制。int型的长度最多为10位,考虑到正负号取11位。
            if(str.length() > 11 || str == null || str.length() == 0)
                return 0;
            //设置reallength来记录除了符号位以外的数字位数,当然也可以通过对符号为置'0'从而求和的时
            //候直接使用str.length便可以,但java中String是不可变的,反而会更麻烦
            int reallength = str.length();
            int flag = 1;
            int start = 0;
            //判断是否存在符号位
            if(str.charAt(0) == '+') {
                flag = 1;
                reallength--;
                start = 1;
            }
            else if(str.charAt(0) == '-') {
                flag = -1;
                reallength--;
                start = 1;
            }
            //判断非法字符
            for(int i = start; i < reallength + start; i++) {
                if(str.charAt(i) >= '0' && str.charAt(i) <= '9') {
                    result = result * 10 + str.charAt(i) - '0';
                }
                else 
                    return 0;
            }
            result *= flag;
            //判断整型的上溢出及下溢出,二者的绝对值不相等
            if(result > Integer.MAX_VALUE || result < Integer.MIN_VALUE)
                return 0;
            else
                return (int) result;
        }
    }
    

    相关文章

      网友评论

          本文标题:把字符串转换成整数

          本文链接:https://www.haomeiwen.com/subject/iocvqctx.html