isdigit()函数传递一个中文参数

1 c++

当我尝试使用isdigit()带有中文字符的函数时,它会在Visual Studio 2013中以调试模式报告一个断言,但在发布模式下没有问题.

我想如果这个函数是确定参数是否为数字,那么如果中文错误,为什么它不返回0?

这是我的代码:

string testString = "abcdefg12345??";
int count = 0;
for (const auto &c : testString) {
    if (isdigit(c)) {
        ++count;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是断言:

图片

Lig*_*ica 5

你违反了合同isdigit(int),该合同只要求所述范围内的ASCII字符.

如果ch的值不能表示为unsigned char且不等于EOF,则行为未定义.

您的标准库实现是善良和断言,而不是继续吹嘘.

isdigit(charT ch, const locale&)您可以在此处使用另一种可识别区域设置的替代方法.

我建议进一步研究"角色"在计算机中的工作方式,特别是编码更多"异国情调"的1个字符集.

1从计算机历史的角度来看.当然,对你来说,这是一个不那么奇特的选择!