Строка типа QString в массив типа int
Нужно конвертировать строку QString в массив int. Вот код функции:
int nonplus_numbers_sum(QString* str_a)
{
int sum = 0;
int size_str = str_a->size();
int* a = new int[size_str];
for (int i = 0; i < size_str; i++)
{
a[i] = str_a[i].toInt();
if (a[i] < 0) sum += a[i];
}
delete[] a;
return sum;
}
Проблема в строке a[i] = str_a[i].toInt();
При попытке скопировать первый элемент строки в первый элемент массива, в первый элемент массива копируется вся строка.
Ответы (1 шт):
У вас str_a
это указатель, соответственно str_a[i]
это первый элемент по этому указателю, то есть ваша строка. Вам надо перед взятием символа разыменовать указатель:
a[i] = (*str_a)[i].???;
Далее как указали в комментарии, toInt
это метод на строке, вам же нужен метод конвертации символа в цифру, это QChar::digitValue
https://doc.qt.io/qt-6/qchar.html#digitValue Этот метод вернет -1 если конвертация не получилась, поэтому выглядит как будто вашу проверку на < 0
надо инвертировать, если результат меньше нуля, то суммировать не надо.
А вообще чтобы не трогать указатели, рекомендую передать строку в функцию по константной ссылке и не выделять память через new
, тем более что вы не возвращаете указатель, а только сумму.
Если все же надо вернуть массив, можете воспользоваться QVector
или std::vector
и в итоге ваш код может выглядеть примерно так:
QVector<int> toDigits(const QString& str)
{
QVector<int> result;
result.reserve(str.size());
for (auto c: str)
{
int value = c.digitValue();
if (value >= 0)
result.append(value);
}
return result;
}