atoiアルゴリズム
4689 ワード
enum Status{KValid=0,KInvalid};
int g_nStatus=KValid;
int StrToInt(const char *str)
{
g_nStatus=KInvalid;
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 StrToIntCore(const char*digit,bool minus)
{
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;
}