String to Integer (atoi)

来源:互联网 发布:360淘宝网 编辑:程序博客网 时间:2024/05/01 06:37

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;    }};
0 0