使用ispunct('ø')时调试断言失败

时间:2016-02-14 06:11:19

标签: c++

我正在编写一个处理大部分文本的程序,需要删除标点符号。我遇到了一个Debug Assertion Failed错误,并将其隔离为:在非英文字母上测试ispunct()时会出现这种情况。

我的测试程序现在是这样的:

的main.c

int main() {
    ispunct('ø');
    cin.get();
    return 0;
}

Debug Assertion Failed窗口如下所示: Screenshot of the error

我尝试的所有非英文字母都会导致此问题,包括“æ”,“ø”,“å”,“é”等。标点符号和英文字母不会导致问题。这可能是我非常简单的事情,所以我感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

字符'ø'必须可以表示为unsigned char,否则您应使用类型wchar_tstd::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;
}