需要跳过前置的空格和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; } };
时间: 2024-10-08 07:55:03