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

【LeetCode】008 String to Integer (atoi)

时间:2015-04-27 14:49:54      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:

题目:LeetCode 008 String to Integer

题意:完成内置函数atoi的功能,将字符串转换成整数。

教训:一开始理所应当的随便一写,然后发现有很多的异常情况需要处理。然后按照C++ Reference中关于atoi的规定一条一条写,才AC。另外还有一个溢出的问题,一开始以为int会自动处理直接返回边界值,其实不是,如果溢出的话大于2147483647的数会给变成负数,因此要单独判断是否会大,但是设置成longlong 之后出现的问题是,还有可能会溢出longlong,所以每次对ans进行改变之后都要判断是否在integer的范围之内。

atoi的函数规则:http://www.cplusplus.com/reference/cstdlib/atoi/ 

1、前导空格忽略

2、判断是否是以‘+‘、‘-‘为前导来规定整数的正负

3、在整数后面有非数字的字符则忽略返回前面的整数

4、如果无法构成有效整数,即含有其他乱七八糟字符,返回0

5、如果超出整数范围,大于的返回INT_MAX=2147483647,小于的返回INT_MIN=-2147483648.

 

代码如下:

class Solution {
public:
    int myAtoi(string str) {
        int len = str.size(), i = 0, flag = 1;
        const int MAX = 2147483647, MIN = -2147483648;
        long long ans = 0;

        // 可能有前导空格
        while(str[i] ==  ) i++;

        // 可能在前面有表示正负的符号
        if(str[i] == -)
        {
            flag = -1;
            i++;
        }
        else if(str[i] == +) i++;

        while(i < len)
        {
            // 保证加起来的字符为有效数字
            if(str[i] <= 9 && str[i] >= 0)
            {
                ans *= 10;
                ans += (str[i++]-0);
                if(ans*flag > MAX) return MAX;
                if(ans*flag <MIN) return MIN;
            }
            // 可能最后有其他字符
            else break;
        }
        ans *= flag;
        if(ans > MAX) return MAX;
        else if(ans <MIN) return MIN;
        return ans;
    }
};

 

【LeetCode】008 String to Integer (atoi)

标签:

原文地址:http://www.cnblogs.com/kathyrine/p/4459886.html

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