从 wstring 中删除某些字符

Delete certain characters from wstring

我的问题类似于 this,除了我处理的是 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>,所以编译器只能找到this overload

您的代码中存在更多实质性错误 - 您在不需要时使用指针,这会导致常见的 sizeof(pointer) 错误,signed/unsigned 比较警告。

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