class Solution {
public:
int myAtoi(string str) {
long long n = 0;
int flag = 0;
for (int i = 0; i < str.length(); i++){
char ch = str.at(i);
if (flag == 0 && ch == ' '){
continue;
}
else if (flag == 0 && ch == '-'){
flag = 1;
}
else if (flag == 0 && ch == '+'){
flag = 2;
}
else if (ch >= 48 && ch <= 57){
if (i == 0){
flag = 3;
}
int rem = ch - '0';
if (n > 214748364){
//如果n大于当前值,并且还有下一位,则肯定溢出了
if (flag == 1){
return numeric_limits<int>::min();
}
else {
return numeric_limits<int>::max();
}
}
if (n == 214748364){
//如果等于214748364则需要分情况讨论,因为int 最大值是2147483647最小值 -2147483648
if (flag == 1 && rem >= 8){
//等于8没有溢出,但是大于8 就溢出了,返回最小值
return numeric_limits<int>::min();
}
else if ((flag == 2 || flag == 3) && rem > 7){
//大于7 就溢出了,返回最小值,等于7可以继续操作也不影响
return 2147483647;
}
}
n = 10 * n + rem;
}
else{
break;
}
}
if (flag == 1){
n = -n;
}
return n;
}
};
挨个遍历数字中位上的数值,访问一个,解析一个,遇到无法解析的返回0
atoi
最新推荐文章于 2023-01-14 18:43:09 发布