C ++ Atoi函数给出了错误

时间:2013-08-25 10:17:49

标签: 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;
}

它为atoi提供了这个错误:

  

从'char'无效转换为'const char *'[-fpermissive] |

我该如何解决这个问题?感谢。

5 个答案:

答案 0 :(得分:5)

您可以使用:

a[i] = str[i] - '0';

按ASCII字符位置进行数字转换的字符。

答案 1 :(得分:3)

执行此操作的正确方法是std::accumulate,而不是自己滚动:

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
});

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

答案 2 :(得分:2)

std::atoi采用const char*(空终止的字符序列)

尝试改变

 a[i]= str[i]-'0';

您正在提供单个char,因此编译器正在抱怨

答案 3 :(得分:1)

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;

答案 4 :(得分:1)

看看这种方式

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;
}