string
を分割しようとしていますが、を使用していますが、を配列に保持します。コード:Qt-文字列を分割するが区切り文字を配列に保持する
QRegExp rx("(\\+|\\-|\\*|\\/)");
QStringList query = text.split(rx);
入力:
2 + 3
があり、これは私の配列 2,3を与えるだろうが、私は2をしたいです、+それを行う方法は?
string
を分割しようとしていますが、を使用していますが、を配列に保持します。コード:Qt-文字列を分割するが区切り文字を配列に保持する
QRegExp rx("(\\+|\\-|\\*|\\/)");
QStringList query = text.split(rx);
入力:
2 + 3
があり、これは私の配列 2,3を与えるだろうが、私は2をしたいです、+それを行う方法は?
Qtにはあなたのための機能はないと思いますが、簡単に再構築できます。正確な構文がわからないため、擬似コード:
QStringList query = text.split(rx);
QStringList queryWithSeparators;
size_t pos = 0;
for (const auto part : query) {
queryWithSeparators.append(part);
pos += part.length;
if (pos + 1 < text.length) {
// we know that the separators are all 1 character long
queryWithSeparators.append(text.substring(pos, 1));
pos += 1;
}
}
これはわかりにくく、わかりにくいです。あなたの例からは、数学的表現を解析しようとしているようです。このタスクで正規表現を使用しようとするよりも、文字単位で読み込むトークナイザを作成する方がはるかに簡単です。
は(あなたが本当にsplit
を使用したい場合は、まずすべての
-
など、あなたが正確に区切りが何であるかを知っているだろう。この方法でこれらの文字列を分割し、その後、すべての
+
のためにそれを分割することができます。)
あなたが持つことができますあなたの問題の解決策を回避する。 このコードを試してみてください。
#include <iostream>
#include <QStringList>
#include <QRegExp>
int main()
{
QString text = "2+3-3-4/5+9+0"; // Input, you can write you own code to take input
QRegExp rx("(\\+|\\-|\\*|\\/)");
QStringList query = text.split(rx);
int count = 0;
int pos = 0;
while ((pos = rx.indexIn(text, pos)) != -1) {
++count;
pos += rx.matchedLength();
query.insert(count * 2-1, QString(text[pos - 1]));
}
return 0;
}
の可能性のある重複した[区切り文字によってC++ spliting文字列と結果に区切り文字を維持](https://stackoverflow.com/questions/27706443/c-spliting-string-by-delimiters- )結果を区切り記号で区切って返します。 – KjMag
C++では必要ありません.C++で必要です。Qt –
@ F.Bartos正規表現は同じです – eyllanesc