atoi函数是把字符串转变为整数的函数,例如“123”->123.而且有效输入只能有第一个字符的+,-号和0-9,以下为实现代码
enum Status//标志代码是否有效
{kValid,
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 *str,bool minus)
{
long long num=0;
while(*str!='\0')
{
if(*str>='0'&&*str<='9')
{
int flag=minus ? -1:1;//判断是否为负
num=num*10+flag*(*str-'0');
if((!minus&&num>0x7FFFFFFF)||(minus&&num<(signed int )0x80000000))
{//判断大于正整数最大值7FFFFFFF和小于最小值的情况
//分两种情况判断是否有上溢或下溢
num=0;//由于这里输出的0,所以为了区分字符“0”,在外部判断时要看全局变量g_nStatus
break;
}
str++;
}
else
{
num=0;
break;
}
}
if(*str=='\0')
g_nStatus=kValid;//表明输入正常无问题
return num;
}