zoukankan      html  css  js  c++  java
  • LeetCode 8 :String to Integer (atoi)

    问题是这样子的:

    Implement atoi to convert a string to an integer.

    Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.

    Notes:  It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.

    平时写程序过于急躁,思考不深入,写这个看似容易的程序真是死了一大批脑细胞啊!!!反思,对于数值处理的问题,以及字符串处理的问题。

    最重要的是:会不会溢出,会不会越界!!!

    以下是我的代码,感觉略臭略长。如有大神帮改,感激不尽啊!!!

    class Solution
    {
    public:
        int atoi(const char *str)
        {
            int ret = 0;
            const char *fStr = str;
            int signflag = 1;
            int signCount = 0;
            int intCount = 0;
            if(fStr == NULL )
            {
                return 0;
            }
            while(*fStr != '')
            {
                if(*fStr == 0x2D)
                {
                    signflag = -1;
                    ++signCount;
                    fStr++;
                }
                if(*fStr == 0x2B)
                {
                    signflag = 1;
                    ++signCount;
                    fStr++;
                }
                if(signCount > 1)
                {
                    return 0;
                }
                if(isdigit(*fStr))
                {
                    if(ret == INT_MAX/10 && *fStr >= 0x38 && signflag == 1)
                    {
                        return INT_MAX;
                    }
                    else if(ret == INT_MAX/10 && *fStr > 0x38 && signflag == -1)
                    {
                        return INT_MIN;
                    }
                    ret = 10 *ret + (*fStr-0x30);
                    ++fStr;
                    ++intCount;
                    if(intCount > 10)
                    {
                        return signflag >0 ? -INT_MIN-1 : INT_MIN;
                    }
                }
                else if(*fStr ==' ')
                {
                    if(intCount >= 1)
                    {
                        return ret * signflag;
                    }
                    else if(signCount >= 1 && intCount ==0 )
                    {
                        return 0;
                    }
                    fStr++;
                }
                else 
                    return ret * signflag;
    
            }
            return ret * signflag;
        }
    
    };

    任重道远,爱情不光是甜蜜,更是一份责任。。。加油!!!

  • 相关阅读:
    伪元素和伪类的区别
    绝对定位是相对定位元素的什么边界进行定位的?
    元素如何设置滚动/滚动条的设置与隐藏
    什么是行内元素、块级元素?
    通过JS判断当前浏览器的类型
    获取元素计算样式getComputedStyle()与currentStyle
    javascript链式运动框架案例
    任意值的运动框架
    JS多物体运动案例:变宽、变高
    offsetWidth与offsetHeight
  • 原文地址:https://www.cnblogs.com/bestwangjie/p/4261933.html
Copyright © 2011-2022 走看看