我有一个包含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] |
我该如何解决这个问题?感谢。
答案 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)
答案 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;
}