C++ C++;Atoi函数给出错误

C++ C++;Atoi函数给出错误,c++,atoi,C++,Atoi,我有一个有5个字符的字符串。我想将每个字符转换成int,然后将它们相乘。代码如下: int main() { int x; string str = "12345"; int a[5]; for(int i = 0; i < 5; i++) { a[i] = atoi(str[i]); } x = a[0]*a[1]*a[2]*a[3]*a[4]; cout<<x<<endl; } i

我有一个有5个字符的字符串。我想将每个字符转换成int,然后将它们相乘。代码如下:

int main()
{
    int x;
    string str = "12345";
    int a[5];
    for(int i = 0; i < 5; i++)
    {
        a[i] = atoi(str[i]);
    }
    x = a[0]*a[1]*a[2]*a[3]*a[4];
    cout<<x<<endl;
}
intmain()
{
int x;
字符串str=“12345”;
int a[5];
对于(int i=0;i<5;i++)
{
a[i]=atoi(str[i]);
}
x=a[0]*a[1]*a[2]*a[3]*a[4];
cout您可以使用:

a[i]=str[i]-“0”;


通过ASCII字符位置进行字符到数字的转换。

str[i]
char
不是
char*

使用以下内容:-

int x;
std::string str = "12345";
int a[5];
for(int i = 0; i < 5; i++)
{
    a[i] = str[i] -'0' ; // simply subtract 48 from char
}
x = a[0]*a[1]*a[2]*a[3]*a[4];
std::cout<<x<<std::endl;
intx;
std::string str=“12345”;
int a[5];
对于(int i=0;i<5;i++)
{
a[i]=str[i]'0';//只需从字符中减去48
}
x=a[0]*a[1]*a[2]*a[3]*a[4];
std::cout接受常量
char*
(以空结尾的字符序列)

试着像这样改变

 a[i]= str[i]-'0';
您提供的是单个
字符
,因此编译器会抱怨

请看这种方式

string str = "12345";
int value = atoistr.c_str());
// then do calculation an value in a loop
int temp=1;    
while(value){
    temp *= (value%10);
    value/=10;
}

正确的方法是,不要自己滚动:

std::accumulate(std::begin(str), std::end(str), 1, [](int total, char c) {
    return total * (c - '0'); //could also decide what to do with non-digits
});

这里有一个供您查看的示例。值得注意的是,该标准保证数字字符始终是连续的,因此从
'0'
中的任何一个减去
'0'
'9'
将始终为您提供数值。

atoi适用于字符串,而不是字符。只需使用
-'0'
就可以了第1个,这不是严格的ASCII,C++不保证ASCII字符集,但它确实保证了这一点。如果不是ASCII,那么它是什么?并且不告诉它它是Unicode…还是它?Muhaha;)JoeDF可能是,在这里,代码> J’-I’<代码>不是< >代码> < <代码> >(和<代码> 'z’+' 1 < /COD>不是<代码> 26 < /COD>),但Irc<代码'1' -'0'=1 (并且直到->代码'''''''=9=9,/>代码>)始终是保证的(对于“数字字符”).至于C++中的EBCDIC,请看它仍然使用了很多(例如SabRE和VISA).我认为它是为真正的老IBM怪物和穿孔卡片?