[LeetCode]String to Integer (atoi)

将string或const char *c转成int,首先找第一个非空字符,如果第一个非空字符是“+-0123456789”说明为有效int,否则输出0

找到非空字符后,如果第一个非空字符为符号位,记录符号,否则,继续。
符号位后的字符不是”0123456789“也是无效的int,输出0
其他情况正确处理

/*
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 the C++ function had been updated. If you still see your function signature accepts a const char * argument, please click the reload button  to reset your code definition.
*/
class Solution {
public:
//stoi,stod,stof(string)
    int myAtoi(string str) {
        string::size_type sz;
        for(sz=0; sz!=str.size(); ++sz)     //找非空字符
            if(str[sz]==' ')
                continue;
            else
                break;
        int flag = 1;   //1 for plus
        if(str[sz]=='-'){
            flag = -1;
            ++sz;
        }
        else if(str[sz]=='+'){
            flag = 1;
            ++sz;
        }
        char c = str[sz];
        long long int ret=0;
        if(c<'0'||c>'9')    return 0;   //invalid
        while(c>='0'&&c<='9'){
            if(flag ==1)
            ret = 10*ret + c-'0';
            else
            ret = 10*ret-(c-'0');
            c = str[++sz];
            if(ret>INT_MAX)
                ret = INT_MAX;
            else if(ret<INT_MIN)
                ret = INT_MIN;
        }
        return ret;

    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值