2017-08-18 18 views
0

stringを分割しようとしていますが、を使用していますが、を配列に保持します。コード:Qt-文字列を分割するが区切り文字を配列に保持する

QRegExp rx("(\\+|\\-|\\*|\\/)"); 
QStringList query = text.split(rx); 

入力:

2 + 3

があり、これは私の配列 2,3を与えるだろうが、私は2をしたいです、+それを行う方法は?

+2

の可能性のある重複した[区切り文字によってC++ spliting文字列と結果に区切り文字を維持](https://stackoverflow.com/questions/27706443/c-spliting-string-by-delimiters- )結果を区切り記号で区切って返します。 – KjMag

+0

C++では必要ありません.C++で必要です。Qt –

+0

@ F.Bartos正規表現は同じです – eyllanesc

答えて

0

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を使用したい場合は、まずすべての -など、あなたが正確に区切りが何であるかを知っているだろう。この方法でこれらの文字列を分割し、その後、すべての +のためにそれを分割することができます。)

1

あなたが持つことができますあなたの問題の解決策を回避する。 このコードを試してみてください。

#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; 
} 
関連する問題