剑指offer atoi源码:
enum Status{Valid=0,InValid};
int status = Valid;
long long AtoL(const char* str, bool minus)
{
long long num = 0;
int flag = minus ? -1 : 1;
while (*str != '\0') {
if (*str >= '0' && *str <= '9') {
num = num * 10 + flag * (*str - '0');
if ((!minus && num > (int)0x7FFFFFFF)
|| (minus && num < (int)0x80000000))
{
num = 0;
break;
}
}
else {
num = 0;
break;
}
str++;
}
if (*str == '\0')
status = Valid;
return num;
}
int Atoi(const char* str)
{
status = InValid;
long long num = 0;
if (str && *str != '\0') {
bool minus;
if (*str == '+') {
str++;
minus = false;
}
else if (*str == '-') {
minus = true;
str++;
}
if (*str >= '0' && *str <= '9') {
num = AtoL(str, minus);
}
}
return (int)num;
}