美文网首页
剑指 offer:49、把字符串转化成整数

剑指 offer:49、把字符串转化成整数

作者: 云中的Jason | 来源:发表于2019-04-21 18:03 被阅读0次

    49. 把字符串转换成整数

    题目描述

    将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。

    输入描述

    输入一个字符串,包括数字字母符号,可以为空

    输出描述

    如果是合法的数值表达则返回该数字,否则返回0

    示例

    输入

    +2147483647

    1a33

    输出

    2147483647

    0

    解题思路:

    本题目要将字符串转换成整数,方法并不复杂,但是要考虑异常处理:

    • 字符串是否为空
    • 字符串对正负号进行处理
    • 输入值是否合法
    • 返回值类型为int,所以要考虑是否有溢出,int范围(-2147483648 ~ 2147483647)

    解答:

    class Solution {
    public:
        int StrToInt(string str) {
            int len = str.size();
            // 判断字符串是否为空
            if(len == 0)
                return 0;
            int begin = 0, isNegative = 0;
            // 处理'+', '-'
            if(str[0] == '+')
            {
                isNegative = 0;
                begin = 1;
            }
            else if(str[0] == '-')
            {
                isNegative = 1;
                begin = 1;
            }
            int position = 1;
            // 以long long 类型存储转换结果
            long long res = 0;
            for(int i = len -1; i >= begin; --i)
            {
                if(str[i] < '0' || str[i] > '9')
                    return 0;
                res += (str[i] - '0') * position;
                position *= 10;
            }
            // 判断是否溢出
            if((isNegative == 0 && res > 0x7fffffff) || (isNegative == 1 && res > 0x80000000))
                return 0;
            else
                res = isNegative ? -res : res;
            return res;
        }
    };
    

    大家有兴趣可以访问我的个人博客,不定时更新一些内容哦!

    图片来自必应壁纸

    相关文章

      网友评论

          本文标题:剑指 offer:49、把字符串转化成整数

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