编写atoi将字符串转换为整数

时间:2015-03-06 15:50:28

标签: c++ c++11

我正在写一个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,为什么这样?

1 个答案:

答案 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语句,更正第一个语句,以便代码不会尝试转换除有效整数字符串以外的任何内容,并且代码应该有效。