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)
这是断言:
你违反了合同isdigit(int),该合同只要求所述范围内的ASCII字符.
如果ch的值不能表示为unsigned char且不等于EOF,则行为未定义.
您的标准库实现是善良和断言,而不是继续吹嘘.
isdigit(charT ch, const locale&)您可以在此处使用另一种可识别区域设置的替代方法.
我建议进一步研究"角色"在计算机中的工作方式,特别是编码更多"异国情调"的1个字符集.
1从计算机历史的角度来看.当然,对你来说,这是一个不那么奇特的选择!