atoi算法

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;
}

 

posted @ 2013-05-11 21:49  liyunyu1  阅读(262)  评论(0编辑  收藏  举报