我有QString
包含一系列数字,例如
QString path = "11100332001 234 554 9394";
我想迭代变长字符串
for (int i=0; i<path.length(); i++){
}
并且可以单独作为int
访问每个号码。
然而,我无法这样做。 问题:如何将QString
个数字转换为int
数组?
我知道我可以使用QString
将int
转换为path.toInt()
,但这对我没有帮助。
尝试将其转换为char时,我收到错误: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);
}
答案 0 :(得分:9)
您可以使用split
来获取由您想要的分隔符分隔的子字符串数组,在这种情况下它是一个空格,这是一个示例:
QString str("123 457 89");
QStringList list = str.split(" ",QString::SkipEmptyParts);
foreach(QString num, list)
cout << num.toInt() << endl;
答案 1 :(得分:4)
您可以使用[]运算符获取每个字符(QChar)并对它们使用digitValue()方法来获取整数。
答案 2 :(得分:3)
使用QTextStream:
QString str = "123 234 23123 432";
QTextStream stream(&str);
QList<int> array;
while (!stream.atEnd()) {
int number;
stream >> number;
array.append(number);
}
答案 3 :(得分:1)
我自己使用了Antoyo的答案,但今天我遇到了一个问题。 digitValue()与使用atoi比较C中的char不同,就像托马斯试图做的那样。因此,虽然托马斯试图这样做:
os: ubuntu 16.04
Apache/2.4.23 (Unix)
OpenSSL/1.0.2h
PHP/7.0.9
mod_perl/2.0.8-dev
Perl/v5.16.3
使用digitValue()就可以了:
for (int i=0; i<path.length(); i++){
char c = path.at(i);
int j = atoi(&c);
//player->movePlayer(direction);
}
但是,如果字符串中有任何字母,则没有预期的结果。例如,在C中,如果字符串混合了字母和数字,那么使用atoi on的任何字符都将返回0代替字母。但是,对于一个字母,digitValue()不会返回0。如果您对字符串中的字母有任何疑虑并且最终结果如下所示,那么首先检查isDigit()可能是个好主意:
for (int i=0; i<path.length(); i++){
int j = path.at(i).digitValue();
//player->movePlayer(direction);
}
这可能不是OP的关注点,但由于这是Google在QT中从字符串中获取数字的最佳结果之一,因此可能对其他人有所帮助,特别是如果您尝试让QT应用程序运行与设备上的某些嵌入式C代码相同。