思路
1 考虑溢出
2 考虑正负号
3 用全局变量标识返回值的状态
代码:
bool GFlag=true;
int atoi(const char *str) {
if(str==NULL)
return 0;
GFlag=false;
bool flag=true;
if(*str=='-'){
flag=false;
str++;
}else if(*str=='+')
str++;
return strToInt(str,flag);
}
int strToInt(const char* str,bool f){
int result=0;
while(*str!='\0'){
if(*str>='0'&&*str<='9'){
int flag=f ? 1 : -1;
result=result*10+flag * (*str-'0');
if((f&&result>0x7FFFFFFF)||(!f&&result<0x80000000)){
result=0;
break;
}
str++;
}else{
result=0;
break;
}
}
if(*str=='\0')
GFlag=true;
return result;
}
代码2:
int atoi(const char *str) {
if(str==NULL)
return 0;
int len=strlen(str);
int i=0;
while(str[i]==' ')
i++;
bool flag=true;
if(str[i]=='-'){
flag=false;
i++;
}else if(str[i]=='+')
i++;
long long result=0;
while(i<len){
if(str[i]>='0'&&str[i]<='9'){
result=result*10+str[i]-'0';
if(result>INT_MAX)
return flag?INT_MAX:INT_MIN;
}else{
return flag?result:(-1)*result;
}
i++;
}
return flag?result:(-1)*result;
}