码迷,mamicode.com
首页 > 其他好文 > 详细

题目:字符串转整数

时间:2018-06-12 00:49:05      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:speed   解答   返回   style   else   string   去除   size_t   题解   

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

题目:字符串转整数

标签:speed   解答   返回   style   else   string   去除   size_t   题解   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!