String to Integer (atoi)

本文介绍了一个C++实现的字符串转整型(int)的方法。通过定义一个Solution类及myAtoi成员函数来解析输入的字符串,并进行类型转换。文章展示了如何去除字符串中的空白字符,处理正负号,验证字符串的有效性,以及如何将有效字符串转换为整数。

c++

class Solution {
public:
    int myAtoi(string str) {
        if (str.empty()) return 0;
        string cleanStr;
        bool hasdigit = false;
        for (auto v : str) {
            if (isdigit(v) || v== '+' || v=='-') {
                cleanStr.push_back(v);
                hasdigit = true;
            }
            if ((hasdigit == true) && (!isdigit(v) && v!= '+' && v!='-'))
                break;

            if ((hasdigit == false) && !isspace(v) && (!isdigit(v) && v!= '+' && v!='-'))
                return 0;
        }
        int cnt = 0;
        for (auto v : cleanStr) {
            cnt += !isdigit(v);
        }
        //cout <<"cleanStr: "<< cleanStr << endl;

        if (cleanStr.size() > 11 && cleanStr[0] == '-')
            return INT_MIN;
        if (cleanStr.size() > 11)
            return INT_MAX;

        if (cnt > 1) return 0;
        long long value = string2int(cleanStr);

        if (value > INT_MAX ) return INT_MAX;
        if (value < INT_MIN) return INT_MIN;
        return value;
    }
private:
    long long string2int(string str) {
        long long res=0;
        long long flag=1;
        if (str[0] == '-'){
            flag = -1;
            str.erase(str.begin());
        }else if (str[0] == '+') {
            flag = 1;
            str.erase(str.begin());
        }
        for (auto v : str) {
            res *= 10;
            res += v - '0';
        }
        return res * flag;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值