enum Status{kValid=0,kInvalid};
int g_nStatus=kValid;
int StrToInt(const char* str)
{
g_nStatus=kInvalid;
long long num=0;
if (str!=NULL&&*str!='\0')
{
bool minus=false;
if(*str=='+')
str++;
else if(*str=='-')
{
str++;
minus=true;
}
if (*str!='\0')
num=StrToIntCore(str,minus);
}
return (int)num;
}
long long StrToIntCore(const char *digit,bool minus)
{
long long num=0;
while(*digit!='\0')
{
if (*digit>='0'&&*digit<='9')
{
int flag=minus?-1:1;
num=num*10+flag*(*digit-'0');
if((!minus&&num>0x7FFFFFFF)||(minus&&num<(signed int)0x80000000))
{
num=0;
break;
}
digit++;
}
else
{
num=0;
break;
}
}
if (*digit=='\0')
g_nStatus=kValid;
return num;
}
atoi函数与它有点差别。1、函数首先跳过字符串前的空格,然后进行数的转换。2、在转换完成后,字符串中如果包含额外的字符则直接跳过。3、如果转换不成功,返回0。如果正溢,返回INT_MAX;负溢,返回INT_MIN