Implement atoi to convert a string to an integer.
Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.
Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.
1039 / 1039 test
cases passed.
88ms
int atoi(const char *str) {
if (!str)
return 0;
bool is_start = false;
int max = 2147483647;
int min = -2147483648;
int pre_max = 214748364;
int sign = 1;
int num = 0;
const char *p = str;
while (*p != '\0') {
char c = *p;
if (c >= '0' && c <= '9') {
is_start = true;
bool overflow = false;
int digit = c - '0';
if (num - pre_max >= 1)
overflow = true;
else if (num == pre_max)
overflow = digit > 7;
if (overflow)
return sign > 0 ? max : min;
num = num * 10 + digit;
} else {
if (is_start)
break;
if ('-' == c) {
sign = -1;
is_start = true;
} else if ('+' == c) {
is_start = true;
} else if (c != ' ') {
return 0;
}
}
++p;
}
return sign * num;
}
本文详细解析了atoi函数的实现原理,包括输入参数处理、符号判断、溢出检查及最终转换过程,旨在帮助开发者理解底层逻辑并优化代码。
234

被折叠的 条评论
为什么被折叠?



