题目:
题解:
int myAtoi(char * s){int i=0;int out=0;int pol=1;int len=strlen(s);if(len==0) return 0;while(s[i]==' ') i++; //删除空格if(s[i]=='-'){ //判断正负pol=-1;i++;}else if(s[i]=='+'){pol=1;i++;}else{pol=1;}while(s[i]!='\0'){if(s[i]<'0'||s[i]>'9'){ //非法字符检查i++;break;}if(out>INT_MAX/10) return (pol>0?INT_MAX:INT_MIN); //越界判断if(out==INT_MAX/10){if(pol>0&&s[i]>'7') return INT_MAX;else if(pol<0&&s[i]>='8') return INT_MIN;}//下面正常来写应该是out=10*out+(s[i]-'0'),之所以先减去'0',//是为了防止10*out+s[i]越界out=10*out-'0'+s[i];//由于本题没有不允许64位的存储数据,所以非法判断可以更加简单//可以直接将out定义为long型,直接判断即可//if(pol*out>INT_MAX) return INT_MAX;//if(pol*out<INT_MIN) return INT_MIN;i++;}out=out*pol;return out;
}