【问题标题】:Qt- Splitting strings but keep the delimiters in arrayQt-拆分字符串但将分隔符保留在数组中
【发布时间】:2017-08-18 21:57:27
【问题描述】:

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

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

输入:

2+3

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

有什么办法吗?

【问题讨论】:

标签: c++ qt


【解决方案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;
}

【讨论】:

    【解决方案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,你可以先将它拆分为所有+,然后将这些字符串全部拆分-等。这样你就可以确切地知道分隔符是什么。)

    【讨论】:

      猜你喜欢
      • 2018-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多