QStringは"s150 d300"です。 QStringから数値を取得して整数に変換するにはどうすればよいですか?単に 'toInt'を使うのは機能しません。英数字QStringからの抽出番号
は「D」は私にとって意味のあるアルファベットの後にのみ番号、「S150のD300」のQStringのから、言ってみましょう。文字列から'300'の値をどのように抽出できますか?
ありがとうございます。
QStringは"s150 d300"です。 QStringから数値を取得して整数に変換するにはどうすればよいですか?単に 'toInt'を使うのは機能しません。英数字QStringからの抽出番号
は「D」は私にとって意味のあるアルファベットの後にのみ番号、「S150のD300」のQStringのから、言ってみましょう。文字列から'300'の値をどのように抽出できますか?
ありがとうございます。
一つの可能な解決策は、以下に示すように、正規表現を使用することです:
#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)
あなたの文字列は、あなたが、あなたのニーズを満たすトークンを見つけ、あなたは、単にそれを分割してそこから値を取得することができた例のようなスペースで区切られたトークンに分割された場合それからその番号の部分を取る。私は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);
}
すでにありますが、この問題への適切な解決策を与えて答えるが、私は、変換された文字列が数値のテキスト表現することとでなければならないので、それはQString::toInt
が動作しないことにストレスにも役立つかもしれないと思います与えられた例では、非標準表記の英数字式なので、Qtが変換を実行するためには "推測不能"にするために手動で処理する必要があります。
QRegExpはQt5で廃止予定です。代わりにQRegularExpressionを使用してください。 Qtフォーラムからの重複した質問:https://forum.qt.io/topic/81717/extract-number-from-an-alphanumeric-qstring – IlBeldus
どちらのバージョンもまだサポートされています。http://doc.qtをご覧ください。 io/qt-5/qregexp.htmlおよびhttp://doc.qt.io/qt-5/qregularexpression.htmlを参照してください。 – eyllanesc
また、重複ではありません。私は2時間前に回答しましたが、フォーラムは15分前に解決されました。 – eyllanesc