PROBLEM
剑指 Offer 67. 把字符串转换成整数
难度 中等
MY ANSWER
代码较为杂乱。
BETTER SOLUTION
处理前置空格与符号不和读取数字放在一个if-else里,处理溢出时注意INT_MIN为-2^32,而INT_MAX为2^32-1。
class Solution { public: int strToInt(string str) { int res = 0; int i = 0; int flag = 1; while (str[i] == ' ') { i++; } if (str[i] == '-') { flag = -1; } if (str[i] == '+' || str[i] == '-') { i++; } while (i < str.size() && isdigit(str[i])) { int r = str[i] - '0'; if (res > INT_MAX / 10 || (res == INT_MAX / 10 && r > 7)) { return flag > 0 ? INT_MAX : INT_MIN; } res = res * 10 + r; i++; } return flag > 0 ? res : -res; } };
|
SUMMARY
字符串处理要注意特例与边界条件的处理。