题目:字符串转整数

Posted change4587

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题目:字符串转整数相关的知识,希望对你有一定的参考价值。

这个问题解答的思路跟上个翻转整数一样,都是通过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()]位一定是一个‘‘字符,这个字符必然不会满足数字字符或者空字符的条件。这意味着我们在做这道题中,只要设置好条件,就不用关心字符串长度的问题(每个循环都会少一次判断)。

以上是关于题目:字符串转整数的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript笔试题(js高级代码片段)

实现整数转成字符串

实现整数转成字符串

题目地址(13. 罗马数字转整数)

题目地址(12. 整数转罗马数字)

字符串13. 罗马数字转整数