2017-07-26 55 views
1

QStringは"s150 d300"です。 QStringから数値を取得して整数に変換するにはどうすればよいですか?単に 'toInt'を使うのは機能しません。英数字QStringからの抽出番号

は「D」は私にとって意味のあるアルファベットの後にのみ番号、「S150のD300」のQStringのから、言ってみましょう。文字列から'300'の値をどのように抽出できますか?

ありがとうございます。

答えて

3

一つの可能​​な解決策は、以下に示すように、正規表現を使用することです:

#include <QCoreApplication> 

#include <QDebug> 

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 

    QString str = "s150 dd300s150 d301d302s15"; 

    QRegExp rx("d(\\d+)"); 

    QList<int> list; 
    int pos = 0; 

    while ((pos = rx.indexIn(str, pos)) != -1) { 
     list << rx.cap(1).toInt(); 
     pos += rx.matchedLength(); 
    } 
    qDebug()<<list; 

    return a.exec(); 
} 

出力:@IlBeldusのコメントに

(300, 301, 302) 

おかげで、情報に基づいてQRegExpはdeprecatedなり、そこで私はQRegularExpressionを使って解決策を提案します:

もう1つの解決策:

QString str = "s150 dd300s150 d301d302s15"; 

QRegularExpression rx("d(\\d+)"); 

QList<int> list; 
QRegularExpressionMatchIterator i = rx.globalMatch(str); 
while (i.hasNext()) { 
    QRegularExpressionMatch match = i.next(); 
    QString word = match.captured(1); 
    list << word.toInt(); 
} 

qDebug()<<list; 

出力:

(300, 301, 302) 
+0

QRegExpはQt5で廃止予定です。代わりにQRegularExpressionを使用してください。 Qtフォーラムからの重複した質問:https://forum.qt.io/topic/81717/extract-number-from-an-alphanumeric-qstring – IlBeldus

+0

どちらのバージョンもまだサポートされています。http://doc.qtをご覧ください。 io/qt-5/qregexp.htmlおよびhttp://doc.qt.io/qt-5/qregularexpression.htmlを参照してください。 – eyllanesc

+0

また、重複ではありません。私は2時間前に回答しましたが、フォーラムは15分前に解決されました。 – eyllanesc

2

あなたの文字列は、あなたが、あなたのニーズを満たすトークンを見つけ、あなたは、単にそれを分割してそこから値を取得することができた例のようなスペースで区切られたトークンに分割された場合それからその番号の部分を取る。私はqstringをより快適なものに変換した後にatoiを使いましたが、もっと効率的な方法があると思います。

これは正規表現ほど柔軟ではありませんが、提供した例の方がパフォーマンスが向上するはずです。

#include <QCoreApplication> 

int main() { 
    QString str = "s150 d300"; 

    // foreach " " space separated token in the string 
    for (QString token : str.split(" ")) 
     // starts with d and has number 
     if (token[0] == 'd' && token.length() > 1) 
      // print the number part of it 
      qDebug() <<atoi(token.toStdString().c_str() + 1); 
} 
0

すでにありますが、この問題への適切な解決策を与えて答えるが、私は、変換された文字列が数値のテキスト表現することとでなければならないので、それはQString::toIntが動作しないことにストレスにも役立つかもしれないと思います与えられた例では、非標準表記の英数字式なので、Qtが変換を実行するためには "推測不能"にするために手動で処理する必要があります。

関連する問題