• 【LeetCode】008 String to Integer (atoi)


    题目: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;
        }
    };
  • 相关阅读:
    Z算法
    CodeForces 939F
    CodeForces 15D
    ZOJ 3408
    CodeForces 962D
    CodeForces 29D
    CodeForces 1129C
    RabbitMQ.NET In Window Service
    封装RabbitMQ.NET Library 的一点经验总结 转载
    DotNetBar 使用笔记
  • 原文地址:https://www.cnblogs.com/kathyrine/p/4459886.html
Copyright © 2020-2023  润新知