Строка типа 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 шт):

Автор решения: Bearded Beaver

У вас 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;
}
→ Ссылка