美文网首页
剑指 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