у меня есть 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);
}
Вы можете получить каждый символ (QChar) с помощью оператора [] и использовать для них метод digitValue (), чтобы получить целое число.
ты можешь использовать split
чтобы получить массив подстрок, разделенных разделителем, который вы хотите, в данном случае это пробел, вот пример:
QString str("123 457 89");
QStringList list = str.split(" ",QString::SkipEmptyParts);
foreach(QString num, list)
cout << num.toInt() << endl;
использование QTextStream:
QString str = "123 234 23123 432";
QTextStream stream(&str);
QList<int> array;
while (!stream.atEnd()) {
int number;
stream >> number;
array.append(number);
}
Я сам использовал ответ Антойо, но столкнулся с проблемой сегодня.
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-код на устройстве.