从 wstring 中删除某些字符
Delete certain characters from wstring
我的问题类似于 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;
}
你好像忘了#include <algorithm>
,所以编译器只能找到this overload。
您的代码中存在更多实质性错误 - 您在不需要时使用指针,这会导致常见的 sizeof(pointer)
错误,signed/unsigned 比较警告。
您还在循环中调用 std::string::erase
,这可能会触发比 std::erase
和 std::remove_if
使用 lambda 和 [=15] 时更多的重新分配和字符复制=] 与 std::wstring
。试试看。
我的问题类似于 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;
}
你好像忘了#include <algorithm>
,所以编译器只能找到this overload。
您的代码中存在更多实质性错误 - 您在不需要时使用指针,这会导致常见的 sizeof(pointer)
错误,signed/unsigned 比较警告。
您还在循环中调用 std::string::erase
,这可能会触发比 std::erase
和 std::remove_if
使用 lambda 和 [=15] 时更多的重新分配和字符复制=] 与 std::wstring
。试试看。