3

我有一个包含 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]|

我怎样才能解决这个问题?谢谢。

4

5 回答 5

5

您可以使用:

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

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

于 2013-08-25T10:20:24.543 回答
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
});

这是一个现场样本,供您观赏。值得注意的是,该标准保证数字字符始终是连续的,因此'0'从任何中减去'0'to'9'将始终为您提供数值。

于 2013-08-25T11:20:23.040 回答
2

std::atoi采用 const char*(以空字符结尾的字符序列)

尝试改变喜欢

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

您提供的是一个,char因此编译器抱怨

于 2013-08-25T10:23:39.360 回答
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;
于 2013-08-25T10:20:33.043 回答
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;
}
于 2013-08-25T10:46:54.547 回答