6

例如,我有一个QString包含一系列数字

QString path = "11100332001 234 554 9394";

我想迭代可变长度字符串

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

}

并且能够int单独访问每个号码。

然而,我无法这样做。问题:如何将一个QString数字转换为一个数组int

我知道我可以将其转换QStringintusingpath.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);
    }
4

4 回答 4

10

您可以使用split获取由您想要的分隔符分隔的子字符串数组,在这种情况下它是一个空格,这是一个示例:

QString str("123 457 89");

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

foreach(QString num, list)
    cout << num.toInt() << endl;
于 2013-01-05T18:42:42.293 回答
4

您可以使用 [] 运算符获取每个字符 (QChar),并对其使用 digitValue() 方法来获取整数。

于 2013-01-05T18:02:09.910 回答
3

使用QTextStream

QString str = "123 234   23123  432";
QTextStream stream(&str);
QList<int> array;
while (!stream.atEnd()) {
    int number;
    stream >> number;
    array.append(number);
}
于 2013-01-05T18:07:55.123 回答
1

我自己使用过Antoyo的答案,但今天遇到了一个问题。digitValue() 与使用 atoi 比较 C 中的字符不同,就像 Thomas 试图做的那样。所以当托马斯试图这样做时:

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 关心的问题,但由于这是从 QT 中的字符串获取数字的最佳 Google 结果之一,它可能对其他人有所帮助,特别是如果您试图让 QT 应用程序的行为与设备上的一些嵌入式 C 代码。

于 2016-11-03T20:41:58.170 回答