[英]Qt- Splitting strings but keep the delimiters in array
我正在尝试使用delimiters
分割string
但我想将delimiters
保留在数组中。 代码:
QRegExp rx("(\\+|\\-|\\*|\\/)");
QStringList query = text.split(rx);
输入:
2 + 3
这将给我一个数组2,3,但我想要2,+,3
有什么办法吗?
您可以解决您的问题。 试试这个代码:
#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;
}
我认为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
,则可以先将其拆分为所有+
,然后将其全部拆分为-
等。这样,您将确切知道分隔符是什么。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.