如何从 space 或 before/after 括号后的 QString 中提取一组数字?
How do I extract a set of numbers from a QString that are after an space or before/after a bracket?
我是 QT 的新手,而不是 C++ 的新手。虽然我不是一个很好的程序员,但我尝试了。
这次想不出办法了
我将做一个 QT 应用程序,我将获得
形式的数据
[1 2 45 345 98 452]
(可能是那样,也可能是 [1,2,45,345,98,452]
,不知道哪个更容易)
我需要存储在数组中的数字
所以我需要把 1 和 2 和 45 分开等等,还要知道有多少个数字。
有什么想法吗?
到目前为止,我已经将数字与括号分开了。
没关系伙计们,只是想通了。
看
QString myString ="[1 0 12 8 0 12 134]"; //Let's say in data
qDebug() << myString.count(QLatin1Char(' ')); //Counting how many spaces
int size = myString.count();
qDebug() << size;
QString newString = myString.mid(1,size-2); //My new string without the []
QRegExp sep("( |,|[|])"); //Regex thingy separating stuff
QStringList list = newString.split(sep);
qDebug() << list; // TA DA!
有没有更好的方法来实现这一点?
谢谢
一种方法是将 QRegularExpression
与 \d+
结合使用并遍历每个数字。然后你可以将结果保存在QVector<int>
中。
请注意 QRegExp
在 Qt 5+
中已弃用
QString number = "[1 2 45 345 98 452]";
QRegularExpression rx("\d+");
QRegularExpressionMatchIterator i = rx.globalMatch(number);
QVector<int> vec1;
while (i.hasNext()) {
QRegularExpressionMatch match = i.next();
vec1.append(match.captured(0).toInt());
}
qDebug() << vec1;
Output QVector(1, 2, 45, 345, 98, 452)
我是 QT 的新手,而不是 C++ 的新手。虽然我不是一个很好的程序员,但我尝试了。 这次想不出办法了
我将做一个 QT 应用程序,我将获得
形式的数据[1 2 45 345 98 452]
(可能是那样,也可能是 [1,2,45,345,98,452]
,不知道哪个更容易)
我需要存储在数组中的数字 所以我需要把 1 和 2 和 45 分开等等,还要知道有多少个数字。
有什么想法吗? 到目前为止,我已经将数字与括号分开了。
没关系伙计们,只是想通了。 看
QString myString ="[1 0 12 8 0 12 134]"; //Let's say in data
qDebug() << myString.count(QLatin1Char(' ')); //Counting how many spaces
int size = myString.count();
qDebug() << size;
QString newString = myString.mid(1,size-2); //My new string without the []
QRegExp sep("( |,|[|])"); //Regex thingy separating stuff
QStringList list = newString.split(sep);
qDebug() << list; // TA DA!
有没有更好的方法来实现这一点? 谢谢
一种方法是将 QRegularExpression
与 \d+
结合使用并遍历每个数字。然后你可以将结果保存在QVector<int>
中。
请注意 QRegExp
在 Qt 5+
QString number = "[1 2 45 345 98 452]";
QRegularExpression rx("\d+");
QRegularExpressionMatchIterator i = rx.globalMatch(number);
QVector<int> vec1;
while (i.hasNext()) {
QRegularExpressionMatch match = i.next();
vec1.append(match.captured(0).toInt());
}
qDebug() << vec1;
Output QVector(1, 2, 45, 345, 98, 452)