字符串转整数
/* 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; } };