atoi通过全局变量来区分返回0的情况。
如果是非法输入,返回0,并把这个全局变量设为特殊标志;
如果输入是”0”,则返回0,不会设置全局变量。
enum Status { kValid = 0, kInvalid};
int g_nStatus = kValid;
int StrToInt(const char* str)
{
g_nStatus = kInvalid;
int num = 0;
if (str != NULL)
{
const char* digit = str;
bool minus = false;
if (*digit == '\+')
{
digit++;
}
else if (*digit == '\-')
{
digit++;
minus = true;
}
while (*digit !='\0')
{
if (*digit >= '0' && *digit <= '9')
{
num = num * 10 + (*digit - '0');
digit++;
}
else
{
num = 0;
break;
}
}
if (*digit == '\0')
{
g_nStatus = kValid;
if (minus)
num = 0 - num;
}
}
return num;
}