Как я могу преобразовать QString чисел в массив int?

у меня есть QString содержащий ряд чисел, например

QString path = "11100332001 234 554 9394";

Я хочу перебрать строку переменной длины

for (int i=0; i<path.length(); i++){

}

и быть в состоянии получить доступ к каждому номеру как int индивидуально.

Однако я не смог этого сделать. Вопрос: Как я могу конвертировать QString чисел в массив int?

Я знаю, что могу преобразовать QString для int с помощью path.toInt() но это не помогает мне

При попытке сначала преобразовать его в символ я получаю сообщение об ошибке: cannot convert 'const QChar to char',

for (int i=0; i<path.length(); i++){
char c = path.at(i);
int j = atoi(&c);
//player->movePlayer(direction);
}

5

Решение

Вы можете получить каждый символ (QChar) с помощью оператора [] и использовать для них метод digitValue (), чтобы получить целое число.

4

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

ты можешь использовать split чтобы получить массив подстрок, разделенных разделителем, который вы хотите, в данном случае это пробел, вот пример:

QString str("123 457 89");

QStringList list = str.split(" ",QString::SkipEmptyParts);

foreach(QString num, list)
cout << num.toInt() << endl;
8

использование QTextStream:

QString str = "123 234   23123  432";
QTextStream stream(&str);
QList<int> array;
while (!stream.atEnd()) {
int number;
stream >> number;
array.append(number);
}
3

Я сам использовал ответ Антойо, но столкнулся с проблемой сегодня.
digitValue () — это не то же самое, что сравнение char в C с использованием atoi, как это делал оп Томас. Итак, пока Томас пытался сделать это:

for (int i=0; i<path.length(); i++){
char c = path.at(i);
int j = atoi(&c);
//player->movePlayer(direction);
}

с digitValue () это стало бы так:

for (int i=0; i<path.length(); i++){
int j = path.at(i).digitValue();
//player->movePlayer(direction);
}

Однако это не дает ожидаемых результатов, если в строке есть какие-либо буквы. Например, в C, если строка содержит сочетание букв и цифр, любой символ, на котором вы используете atoi, вернет 0 вместо буквы. digitValue (), однако, не возвращает 0 для буквы. Хорошей идеей будет сначала сделать проверку на isDigit (), если у вас есть какие-либо опасения по поводу букв, попадающих в вашу строку, и конечный результат будет выглядеть так:

int j = 0;
for (int i=0; i<path.length(); i++){
if (path.at(i).isDigit())
j = path.at(i).digitValue();
else
j = 0;
//player->movePlayer(direction);
}

Возможно, это не было проблемой для OP, но так как это один из лучших результатов Google для получения чисел из строки в QT, это может помочь кому-то еще, особенно если вы пытаетесь заставить приложение QT вести себя так же, как некоторый встроенный C-код на устройстве.

1
По вопросам рекламы [email protected]