【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.

Update (2015-02-10):

The signature of theC++function had been updated. If you still see your function signature accepts aconst char *argument, please click the reload buttonto reset your code definition.

spoilers alert... click to show requirements for atoi.

Subscribeto see which companies asked this question.

Show Tags

Show Similar Problems


题意:

就是自己实现atoi,这题最坑的是越界的时候应该返回最大或最小值max_int 与min_int,但题目中没有提示——当然这样设计的一个目的可能是防止刷题人直接调用itoa函数。注意 后面有字符时,直接跳出输出前面的数,与atoi一致。

我的做法是定义long long型,超限时break。

class Solution {
public:
    int myAtoi(string s) {
        long long rst=0,i=0;
        bool normal=true;
        int s1=1;
                while(s[i]==' ') i++;
        if(s[i]=='-') {s1=-1; i++;}
        else if(s[i]=='+') i++;

        
        while(i!=s.size()){
            if(s[i]<='9'&&s[i]>='0')
             {rst=rst*10+s[i++]-'0';
                if(rst>(long long)INT_MAX+1LL) break;
             }
             else if(s[i]=='+'||s[i]=='-')
            {normal=false;
                break;
            }
            else break;
        }
        if(!normal) return 0;
        
        rst=rst*s1;
        if(rst<INT_MIN) return INT_MIN;
        if(rst>INT_MAX) return INT_MAX;
        
        return rst;
    }
};



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值