У меня есть строка, которая имеет 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] |
Как я могу это исправить? Благодарю.
Ты можешь использовать:
a[i] = str[i] - '0';
Выполняет преобразование символа в цифру по позициям символов ASCII.
Правильный способ сделать это 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'
всегда даст вам числовое значение.
станд :: atoi принимает const char*
(нулевая завершенная последовательность символов)
Попробуйте изменить как
a[i]= str[i]-'0';
Вы поставляете с одного char
следовательно, компилятор жалуется
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;
посмотри на это
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;
}