题解 | #把字符串转换成整数(atoi)#
把字符串转换成整数(atoi)
https://www.nowcoder.com/practice/d11471c3bf2d40f38b66bb12785df47f
#include <cstdint> #include <string> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return int整型 */ #define INT_MAX ((1<<31) -1) #define INT_MIN (- (1 << 31)) int StrToInt(string s) { if (s.empty()) { return 0; } string str_tmp = s; int i = 0; //去掉无用的前导空格 for (; i < str_tmp.length(); i++) { if (str_tmp[i] != ' ') { break; } } str_tmp = str_tmp.substr(i, str_tmp.length() - i); if (str_tmp.empty()) { return 0; } //是否正数 bool bFalg = true; if (str_tmp[0] == '-') { bFalg = false; str_tmp = str_tmp.substr(1, str_tmp.length() - 1); } else if (str_tmp[0] == '+') { bFalg = true; str_tmp = str_tmp.substr(1, str_tmp.length() - 1); } if (str_tmp.empty()) { return 0; } for (i = 0; i < str_tmp.length(); i++) { if (str_tmp[i] < '0' || str_tmp[i] > '9') { break; } } //去掉后面存在多余的字符 str_tmp = str_tmp.substr(0, i); if (str_tmp.empty()) { return 0; } int64_t ret64 = 0; for (i = 0; i < str_tmp.length(); i++) { ret64 = ret64 * 10 + (str_tmp[i] - '0'); if (bFalg) { if (ret64 > INT_MAX) { return INT_MAX; } } else { if (ret64 * -1 < INT_MIN) { return INT_MIN; } } } if (bFalg) { return (int)ret64; } return ret64 * -1; } };