enum Status {kValid=0,kInValid};
int g_nStatus=kValid;
long long StrToIntCore(const char* digit,bool minus)
{
long long num=0;
while(*digit!='\0')
{
if(*digit>='0' && *digit<='9')
{
//介于0-9之间,则minus=false,flag=1
int flag=minus?-1:1;
num=num*10+flag*(*digit-'0');
//如果minus=false并且num达到正整数最大值0x7fffffff
//或者minus=true并且num达到负整数最小值0x80000000
//则溢出,break
if((!minus && num>0x7fffffff) || (minus&& num<(signed int)0x80000000))
{
num=0;
break;
}
digit++;
}
else
{
num=0;
break;
}
}
//区分NULL和0
if(*digit=='\0')
g_nStatus=kValid;
return num;
}
int StrToInt(const char* str)
{
g_nStatus=kInValid;
long long num=0;
if(str!=NULL && *str!='\0')
{
bool minus=false;
//除了输入0-9,“+”和“-”也合法
//因此在遍历到“+”和“-”时,应跳到下一个,即str++
if(*str=='+')
str++;
else if(*str=='-')
{
str++;
minus=true;
}
//处理单个字符转换
if(*str!='\0')
num=StrToIntCore(str,minus);
}
//str==NULL:num=0 && g_nStatus=kInvalid
//str==0:num=0 && g_nStatus=kValid
//即通过设置全局变量来区分NULL和0的输入
return (int)num;
}