Qt-拆分字符串但将分隔符保留在数组中

时间:2017-08-18 21:57:28

标签: c++ qt

我正在尝试使用string拆分delimiters,但我希望将delimiters保留在数组中。代码:

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

输入:

  

2 + 3

这会给我一个数组 2,3,但我想要2,+,3

有没有办法做到这一点?

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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,你可以先为所有+拆分它,然后将这些字符串拆分为所有-等。这样你就可以准确地知道分隔符是。)