gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:08:01 33 4
gpt4 key购买 nike

当我尝试使用带有汉字的isdigit() 函数时,它在 Debug模式下的Visual Studio 2013 中报告断言,但在 Release模式下没有问题。

我想如果这个函数是判断参数是否为数字,为什么中文错误不返回0呢?

这是我的代码:

string testString = "abcdefg12345中文";
int count = 0;
for (const auto &c : testString) {
if (isdigit(c)) {
++count;
}
}

这是断言:

Image

最佳答案

你违反了isdigit(int)的契约(Contract),它只需要指定范围内的 ASCII 字符。

The behavior is undefined if the value of ch is not representable as unsigned char and is not equal to EOF.

您的标准库实现是友善和自信的,而不是继续搞砸。

有一个替代方案,可识别区域设置 isdigit(charT ch, const locale&)您可以在这里使用。

我建议对“字符”在计算机中的工作方式进行一些进一步的研究,特别是关于编码更多“奇特”1 字符集。

1 从计算机历史的角度。当然,对您来说,它是不那么异国情调的选择!

关于c++ - isdigit() 函数传递一个中文参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43544690/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com