我需要根据QString
替换字符
QChar::category
。在stdlib术语中我想
string.erase(std::remove_if(begin(string), end(string),
[](QChar c) {
QChar::Category cat = c.category();
return cat == .... || cat == ...; }),
string.end());
或者,我对正在使用unicode字符的正则表达式感到满意
我可以用于QString::replace
的类别。
这可能与QString有关,还是我真的需要转动字符串
在std::vector<QChar>
和后面?
编辑:我想要保留的类别:
我可以先做多次通过/休息。
答案 0 :(得分:4)
Qt提供了自己的方法来做这些事情。无论是好还是不好都是值得怀疑的,但Qt惯用就是
QString result;
result.reserve(string.size());
foreach (const QChar& c, string) {
if (is_good(c)) {
result += c;
}
}
当然,您可以使用lambdas和std::for_each
std::for_each(string.begin(), string.end(),
[&result](QChar c)
{
if (is_good(c)) {result += c; }
}
);
但不是Qt
惯用语。
请注意,从字符串中删除符号的速度较慢,然后添加new(如果保留了空格),这就是第一个代码示例速度很快的原因。