lintcode 转换字符串到整数

本文介绍了一个将字符串转换为整数(atoi)的函数实现方法。该函数需处理多种情况,如忽略前后空白、判断正负号、处理非数字字符等,并确保转换结果不超过32位整数的范围。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转换字符串到整数 

实现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;
    }
};

转换字符串到整数 






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值