我正在编写一个处理大部分文本的程序,需要删除标点符号。我遇到了一个Debug Assertion Failed错误,并将其隔离为:在非英文字母上测试ispunct()时会出现这种情况。
我的测试程序现在是这样的:
的main.c
int main() {
ispunct('ø');
cin.get();
return 0;
}
Debug Assertion Failed窗口如下所示: Screenshot of the error
我尝试的所有非英文字母都会导致此问题,包括“æ”,“ø”,“å”,“é”等。标点符号和英文字母不会导致问题。这可能是我非常简单的事情,所以我感谢任何帮助!
答案 0 :(得分:2)
字符'ø'
必须可以表示为unsigned char
,否则您应使用类型wchar_t
和std::ispunct
,例如:
#include <iostream>
#include <locale>
int main()
{
const wchar_t c = L'ø';
std::locale loc("en_US.UTF-8");
std::ispunct(c, loc);
}
对于您的问题,您也可以这样做:
#include <locale>
#include <string>
#include <algorithm>
#include <functional>
int main()
{
std::wstring word = L"søme.?.thing";
std::locale loc("en_US.UTF-8");
using namespace std::placeholders;
word.erase(std::remove_if(word.begin(), word.end(),
std::bind(std::ispunct<wchar_t>, _1, loc)), word.end());
std::wcout << word << std::endl;
}