如何将数字的QString转换为int数组?

How can I convert a QString of numbers to an array of int?

本文关键字:int 数组 转换 QString 数字      更新时间:2023-10-16

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

QString path = "11100332001 234 554 9394";

我想遍历可变长度字符串

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

,并且能够单独访问每个数字作为int

我还没能做到这一点。问题:如何将数字的QString转换为int数组?

我知道我可以使用path.toInt()QString转换为int,但这对我没有帮助。

当尝试将其转换为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);
    }

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

QString str("123 457 89");
QStringList list = str.split(" ",QString::SkipEmptyParts);
foreach(QString num, list)
    cout << num.toInt() << endl;

您可以使用[]运算符获得每个字符(QChar),并使用digitValue()方法对它们进行处理以获得整数

使用QTextStream:

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

我已经使用了Antoyo自己的答案,但是我今天遇到了一个问题。digitValue()与使用atoi比较C中的字符不一样,就像Thomas试图做的那样。所以当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语言中,如果字符串是字母和数字的混合,那么您使用的任何字符都将返回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代码相同。