lintcode 转换字符串到整数

来源:互联网 发布:朗读英语的软件 编辑:程序博客网 时间:2024/06/01 07:21

转换字符串到整数 

实现atoi这个函数,将一个字符串转换为整数。如果没有合法的整数,返回0。如果整数超出了32位整数的范围,返回INT_MAX(2147483647)如果是正整数,或者INT_MIN(-2147483648)如果是负整数。

样例

"10" =>10

"-1" => -1

"123123123123123" => 2147483647

"1.0" => 1

标签 
相关题目 
分析:这道题需要考虑的情况有点多,我自己花四十分钟做的通过率为百分之80。这里有个最要注意的地方是对于“     123abc”这样的字符串,返回的是123。而如果第一个非空非正负符号的字符不是数字,就返回0.总共可能的情况如下

(一).""的话返回0。

(二).字符串两边有空格自动屏蔽,有小数点小数点后面的内容舍弃。

(三)."+123"和"123"效果一样。

(四)."a...","-h..."这种,除了符号位只要非数字打头,返回0。

(五)."123gdah3423","-123ff777"这种返回123,-123。

(六).超了范围之后,判断正负性。

先上自己部分正确的代码,现在是第五条不满足条件,有时间修改一下

9.14更新,代码通过,就是有点乱。。

class Solution {public:    /*     * @param str: A string     * @return: An integer     */     private:     bool Sign=true;//判断正负     public:    int atoi(string &str) {        // write your code here        int num=0,i=0;        long sum=0;        int p=0;//判断第一个符号位        bool no_zero=false;//遇到第一个非0        bool no_blank=false;        for(;i<str.size();i++)        {            if(!no_blank&&str[i]==' ')//检查头部空格            {                continue;            }            no_blank=true;            if((p==0)&&(str[i]=='+'||str[i]=='-'))//检查头部符号            {                p++;                if(str[i]=='+')                Sign=true;                else if(str[i]=='-')                Sign=false;                continue;            }            if((str[i]-'0'<0||str[i]-'0'>9)&&str[i]!='.')//去除非小数点字符            {                        if(Sign)                           return (int)sum;                        else                        return 0-(int)sum;            }            if((no_zero)&&str[i]=='.')//遇到小数点且前面的数字不是0            {                        if(Sign)                           return (int)sum;                        else                        return 0-(int)sum;            }            if(!no_zero&&str[i]=='0')//去掉第一个非0数前的0            {            continue;            }            else             {                p++;                no_zero=true;//走到这里一定不是0;                sum=sum*10+(str[i]-'0');                num++;            }            if(num==10)            {                if((Sign==true)&&(sum>2147483647))                {                      return INT_MAX;                }                if((Sign==false)&&(abs(sum)>2147483648))                {                    return INT_MIN;                }            }            if(num>10)            {                if(Sign==true)                return INT_MAX;                if(Sign==false)                return INT_MIN;                            }                                }        if(Sign)        return (int)sum;        else        return 0-(int)sum;    }};

转换字符串到整数 

Accepted

总耗时: 360 ms
100% 数据通过测试.
还没解决的相关题目
    13. 字符串查找55. 比较字符串30. 插入区间9. Fizz Buzz 问题8. 旋转字符串






原创粉丝点击