题目:字符串转整数

这个问题解答的思路跟上个翻转整数一样,都是通过long long类型存储一个结果字符串,然后返回int区域内大小的数字。

这道题我出了好几次问题,后来才发现是因为没有仔细读题,题目只说了去除刚开始遇到的空格而我去除全部了。

我写出的正确的代码如下(效率超过了100%):

static const auto io_speed_up = []()
{
    std::ios::sync_with_stdio(false);
    cin.tie(nullptr);
    return 0;
}();

class Solution {
public:
    int myAtoi(string str) {
        size_t index    = 0;
        bool flag = false;
        long long res = 0;
        while (str[index] == ' ')
            ++index;

        if (str[index] == '-')
        {
            flag = true;
            ++index;
        }
        else if(str[index] == '+')
            ++index;

        while (str[index] >= '0' && str[index] <= '9' && res < INT_MAX)
        {
            res = res * 10 + str[index] - '0';
            ++index;
        }
        if (flag)
            res = -res;
        if (res > INT_MAX)
            return INT_MAX;
        if (res < INT_MIN)
            return INT_MIN;
        return (int)res;
    }
};

这道题有一个有意思的地方在于,传递的是一个字符串,那么最后一位即str[str.size()]位一定是一个''字符,这个字符必然不会满足数字字符或者空字符的条件。这意味着我们在做这道题中,只要设置好条件,就不用关心字符串长度的问题(每个循环都会少一次判断)。

原文地址:https://www.cnblogs.com/change4587/p/9170702.html