我的问题与this类似,不同之处在于我正在处理wstring
而不是string
。我将类型切换为wstring
和wchar_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;
}
答案 0 :(得分:2)
您似乎忘记了#include <algorithm>
,因此编译器只能找到this overload。
您的代码中存在更多实质性错误 - 您在不需要时使用指针,这会导致常见的sizeof(pointer)
错误,签名/未签名的比较警告。
您还在一个循环中调用std::string::erase
,这可能会触发更多的重新分配和字符复制,而不是您使用std::erase
和std::remove_if
获得lambda和{{1 {}为std::any_of
。试试吧。