Столкнулся с проблемой и никак не могу решить уже пару дней , прошу помощи. Суть в том , что мне необходимо из строки вычленить все цифры, разделенные там пробелами . Вот как я пытался это сделать :
string str = "9 8 7 6 5 4 3 2 1";
int *arr = new int;
string :: const_iterator it = str.begin();
// Если тут вывести (*it) то результатом будет 9
int i = 0;
for (; it != str.end(); ++it)
{
if (isdigit(*it))
{
arr[i] = *it;
i++;
}
}
Как видно из комментария , на его месте разыменованный итератор возвращает 9 , ОДНАКО , когда итератор попадает в цикл , то : 1) в первый раз он проходит проверку isdigit(*it) и попадает дальше 2) в arr[0] по какой-то причине записываться не 9 , а 49 и с другими цифрами то же самое - их значение увеличивается.Функция stoi(*it) почему-то отказывается работать .
#include <iostream>
constexpr int DESIRABLE_VALUE = 100;
int main()
{
std::string str = "9 8 7 6 5 4 3 2 1";
int *arr = new int[DESIRABLE_VALUE];
auto it = str.begin();
int i = 0;
for (; it != str.end(); ++it)
{
if (isdigit(*it))
{
arr[i] = *it - 48;
i++;
}
}
for(auto i = 0; i < 9; i++)
{
std::cout << arr[i];
}
delete[] arr;
}
-48, чтобы перевести из ascii, т.к. в итератор итерирует по строке получая чары (а конкретно вы получаете номер числа в ascii таблице, то есть числу 9 будет соответствовать 57
И соответственно вы не выделили под ваш arr
память с помощью оператора []
, в котором нужно было указать, сколько элементов соответствуещего типа будет в вашем динамическом массиве.
Вместо constexpr int DESIRABLE_VALUE = 100;
вы можете сперва пройтись по массиву строк посчитав, сколько чисел в нем находится, чтобы позже выяснить, сколько памяти потребуется вашему arr
для дальнейшей работы с полученными из строки числами.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
У меня есть необходимость хранить значение цвета в формате 0xAARRGGBB, то есть, нужен тип, занимающий 4 байтаЯ использую unsigned int, но, насколько знаю,...
ПриветТакая проблема, что после строчки int coc=0; Цикл с вложенным, там xPtr выходит за рамки, не понимаю почему, можете помочь пожалуйста решить...
Я выполняю сложение float + floatМне надо в цикле прибавить к массиву типа float значение переменной Eps=0