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

时间:2013-01-05 17:58:01

标签: c++ qt type-conversion qstring

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

QString path = "11100332001 234 554 9394";

我想迭代变长字符串

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

}

并且可以单独作为int访问每个号码。

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

我知道我可以使用QStringint转换为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);
    }

4 个答案:

答案 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代码相同。