从wstring中删除某些字符

时间:2017-02-25 11:36:09

标签: c++ 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;
}

1 个答案:

答案 0 :(得分:2)

您似乎忘记了#include <algorithm>,因此编译器只能找到this overload

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

您还在一个循环中调用std::string::erase,这可能会触发更多的重新分配和字符复制,而不是您使用std::erasestd::remove_if获得lambda和{{1 {}为std::any_of。试试吧。