atoi
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=='-') { minus=true; str++; } 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=10*num+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; }