zoukankan      html  css  js  c++  java
  • 【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;
        }
    };
  • 相关阅读:
    visual studio 2012 知识笔记
    R语言初体验
    java_Thread
    LoadRunner JAVA Vuser协议手工写脚本Failed to find Classes.zip entry in Classpath问题
    如何判断某个数据表是否存在
    ftp://hxtech.com
    成本算法
    移动平均算法
    命令行解压缩文件
    互斥(mutex)
  • 原文地址:https://www.cnblogs.com/kathyrine/p/4459886.html
Copyright © 2011-2022 走看看