将字符串转换为整数会产生意想不到的结果

Convert a string to an integer produced unexpected result

本文关键字:意想不到 结果 字符串 转换 整数      更新时间:2023-10-16

我是一个新的c++学习者,现在正在经历"将字符串转换为整数"的问题。以下是我的代码,但是当我在Xcode上尝试时,它打印了1068,这不是我期望的。我试了其他一些,同样的bug也出现了。有人能帮我一下吗?

#include <iostream>
#include <string>
using namespace std;
int myAtoi(const char* str) {
    int Res=0;
    bool Sign=true;
    while(*str==' '){str++;}
    if(!isdigit(*str)&&*str!='+'&&*str!='-')
              {return 0;}
    if(*str=='+'||*str=='-'){
        if(!isdigit(*(str+1))){return 0;}
         else if (*str=='-'){Sign=false;}
          str++;
    }
    while (isdigit(*str)){
        if(Res>INT_MAX){return Sign?INT_MAX:INT_MIN;}
        Res=Res*10+int(*str+'0');
        str++;
    }
    return Sign?Res:-Res;

}

int main(){
    int sample=myAtoi("  +12");
    cout<<sample<<endl;
    return 0;
}

你应该做Res=Res*10+int(*str-'0');,而不是你所做的。*str是您当前正在查看的字符。要将其转换为整数等价物,必须减去'0'的ASCII值。

数字n的ASCII值很直观的就是n + ASCII(0)