我正在写一个atoi来将字符串转换为整数。这是我的atoi()函数代码
int atoi(string str) {
int num=0;
int sign=1;
int len=str.size();
int i=0;
if(str[i]==' '&& i<len) i++;
if(str[i]=='+') i++;
if(str[i]=='-') {i++;sign=-1;}
for(;i<len;i++){
if(str[i]==' ') break;
if(str[i]<'0' || str[i]>'9') break;
if(INT_MAX/10<num || INT_MAX/10==num && INT_MAX%10<(str[i]-'0'))
{ return sign==-1 ?INT_MIN:INT_MAX;
break;
}
num=num*10+str[i]-'0';
}
return num*sign;
}
然而,当输入&#39; 1&#39;时,输出为0,为什么这样?
答案 0 :(得分:1)
if(str[i]<'0' || str[i]>'9') break;
不会让你走得太远;如果您输入12aaa
,您希望您的方法返回一些错误代码或什么都不返回,而不是字符串的整数部分。我甚至不知道这应该是什么......
if(INT_MAX/10<num || INT_MAX/10==num && INT_MAX%10<(str[i]-'0'))
{ return sign==-1 ?INT_MIN:INT_MAX;
break;
}
删除我突出显示的最后一个if语句,更正第一个语句,以便代码不会尝试转换除有效整数字符串以外的任何内容,并且代码应该有效。