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] |

Как я могу это исправить? Благодарю.

3

Решение

Ты можешь использовать:

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

Выполняет преобразование символа в цифру по позициям символов ASCII.

5

Другие решения

Правильный способ сделать это 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' в '9' всегда даст вам числовое значение.

3

станд :: atoi принимает const char*(нулевая завершенная последовательность символов)

Попробуйте изменить как

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

Вы поставляете с одного char следовательно, компилятор жалуется

2

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