字符串转整数

字符串转整数

/*
2022年09月18日 17:54:36
把每一个数取下来,乘上对应的10的len-1次方
"+123" -->  "0123"
0 --> 0
1 * 10^2  --> ret = 100
2 * 10^1 -->  ret = 120
3 * 10^0  --> ret = 123
*/

class Solution {
  public:
    int StrToInt(string str) {
        if (str == "")
            return 0;
        int len = str.size();
        long long ret = 0;
        bool flag = true; // 由于之后还需要从第一个字符开始遍历,因此判断正负之后将str[0]置为'0'就不会影响了
        if (str[0] == '-') {
            str[0] = '0';
            flag = false;
        }
        if (str[0] == '+') {
            str[0] = '0';
            flag = true;
        }

        for (int i = 0; i < str.size(); ++i) {
            if (str[i] < '0' || str[i] > '9') // 特殊字符,排除了正负号
                return 0;
            if (str[i] >= '0' && str[i] <= '9') {
                long long tmp = (str[i] - '0') * pow(10, len - 1);
                --len;
                ret += tmp;
            }
        }
        if (flag == false)
            ret *= -1;
        return ret;
    }
};

利用ret = ret*10 + str[i] - '0';逐个累加ret。

/*
2022年09月18日 18:09:59
"+123" --> "0123"
ret = ret*10 + str[i] - '0';
0 
1
10+2  --> 12
120 + 3 --> 123
*/

class Solution {
  public:
    int StrToInt(string str) {
        if (str == "")
            return 0;
        long long ret = 0;
        bool flag = true; // 由于之后还需要从第一个字符开始遍历,因此判断正负之后将str[0]置为'0'就不会影响了
        if (str[0] == '-') {
            str[0] = '0';
            flag = false;
        }
        if (str[0] == '+') {
            str[0] = '0';
            flag = true;
        }

        for (int i = 0; i < str.size(); ++i) {
            if (str[i] < '0' || str[i] > '9') // 特殊字符,排除了正负号
                return 0;
            if (str[i] >= '0' && str[i] <= '9') {
                ret = ret*10 + str[i] - '0';
            }
        }
        if (flag == false)
            ret *= -1;
        return ret;
    }
};