6

QStringたとえば、一連の数字が含まれています

QString path = "11100332001 234 554 9394";

可変長の文字列を繰り返し処理したい

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

}

int各番号に個別にアクセスできます。

しかし、私はそうすることができませんでした。質問QString:数値の配列を配列に変換するにはどうすればよいintですか?

QStringintusingに変換できることは知って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

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

[]演算子を使用してすべての文字(QC​​har)を取得し、それらに対して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()は、Thomasがやろうとしていたopのようにatoiを使用してCのcharを比較することと同じではありません。したがって、トーマスがこれを行おうとしている間、次のようになります。

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を使用するcharは、文字の代わりに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の上位の結果の1つであるため、特にQTアプリケーションを同じように動作させようとしている場合は他の誰かに役立つ可能性がありますデバイスに埋め込まれたCコード。

于 2016-11-03T20:41:58.170 に答える