如何解决如何从 C++Builder 中的 UnicodeString 中删除非字母数字?
在我正在处理的项目中,使用 Embarcadero C++Builder,所有源文件在使用字符串时都使用 UnicodeString
。
我发现这个片段可以从 std::wstring
中删除字符:
#include <cctype>
#include <algorithm>
#include <string>
//...
std::wstring FileHandler::removePunctuation(std::wstring word)
{
word.erase(std::remove_if(word.begin(),word.end(),[](char ch){ return !::iswalnum(ch); }),word.end());
return word;
}
但是如何将相同的算法应用于 UnicodeString
?或者,是否有与实现类似的功能?
解决方法
UnicodeString
有 begin()
和 end()
迭代器,因此您可以像使用 std::remove_if()
一样使用 std::wstring
。
然而,UnicodeString
没有像 erase()
那样基于迭代器的 std::wstring
方法,但它有基于索引的 Delete()
方法。 std::removee_if()
只是将“已删除”的字符移动到字符串的末尾,因此您可以使用 remove_if()
返回的迭代器来计算要从中删除的起始索引,例如:
#include <cctype>
#include <algorithm>
//...
UnicodeString FileHandler::removePunctuation(UnicodeString word)
{
auto iter = std::remove_if(word.begin(),word.end(),[](WideChar ch){ return !::iswalnum(ch); });
// Note: UnicodeString indexes start at 1,not 0!!
word.Delete(std::distance(word.begin(),iter) + 1,MaxInt);
return word;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。