一、如果字符串为空,返回0
二、去除字符串首部的空格
三、判断正负号
四、判断并转化数字字符,如果遇到非数字字符,就返回已转化的值
五、分别考虑正数和负数的溢出情况
class Solution {
public:
int myAtoi(string str) {
if (str.empty()) return 0;
int i = 0;
//去除字符串首部的空格
while (i < str.length() && str[i] == ' ') ++i;
//判断正负号
int flag = 1;
if (i < str.length() && str[i] == '-') {
flag = -1;
++i;
} else if (i < str.length() && str[i] == '+') {
++i;
}
//转化数字
int num = 0;
while (i < str.length() && str[i] >= '0' && str[i] <= '9') {
//判断是否溢出
if (num > INT_MAX / 10) return flag > 0 ? INT_MAX : INT_MIN;
if (num == INT_MAX / 10) {
if (flag > 0 && str[i] - '0' > 7) return INT_MAX;
if (flag < 0 && str[i] - '0' > 8) return INT_MIN;
}
num = 10 * num + str[i] - '0';
++i;
}
return flag * num;
}
};