需要跳过前置的空格和0;
必须考虑前置符号;
int的取值范围为[0x7fffffff, 0x80000000],如果超过了这个边界,则取边界。为了判断是否超过边界,需要用一个更大的整数类型表示,这里用long long;
“ -12a12” 输出的是前面有效部分-12
class Solution {
public:
int atoi(const char *str) {
if(!str||*str=='\0')return 0;
int flag=1;
long long ans=0;
while(*str&&(*str==' '||*str=='0'))str++;
if(str[0]=='+')
str++;
else if(str[0]=='-')
flag=-1,str++;
for(;*str!='\0';str++){
if(*str>='0'&&*str<='9')
ans=ans*10+(*str-'0');
else
break;
if(flag==1&&ans>0x7fffffff){
ans=0x7fffffff;break;
}
else if(flag==-1&&ans>0x80000000){
ans=0x80000000;break;
}
}
int ians=flag*((int)ans);
return ians;
}
};