从字符串中删除某些字符

Delete certain characters from wstring

本文关键字:字符 删除 字符串      更新时间:2023-10-16

我的问题与此类似,只是我正在处理wstring而不是string。我将类型切换为wstringwchar_t并对其进行了编译,但出现错误。这是代码:

int delete_punc(std::wstring& str)
{
wchar_t* chars = L".,!?";
for (int i = 0; i < sizeof(chars); i++)
str.erase(std::remove(str.begin(), str.end(), chars[i]), str.end());
return 0;
}

这是我得到的错误:

error: cannot convert ‘std::basic_string<wchar_t>::iterator
{aka __gnu_cxx::__normal_iterator<wchar_t*, std::basic_string<wchar_t> >}’
to ‘const char*’ for argument ‘1’ to ‘int remove(const char*)

编辑:我还尝试了其他蛮力变体。两者都返回了相同的错误。

int delete_punc(std::wstring& str)
{
//str.erase(std::remove(str.begin(), str.end(), L"."), str.end());
//str.erase(std::remove(str.begin(), str.end(), "."), str.end());
return 0;
}

看起来你忘了#include <algorithm>,所以编译器只能找到这个重载。

代码中出现更多实质性错误 - 在不需要时使用指针,这会导致常见sizeof(pointer)错误,即有符号/无符号比较警告。

您还在循环中调用std::string::erase,这可能会触发比使用std::erasestd::remove_if使用 lambda 和std::any_of使用std::wstring时更多的重新分配和字符复制。试试吧。