首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >isdigit()函数传递一个中文参数

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

Stack Overflow用户
提问于 2017-04-21 22:00:06
回答 1查看 471关注 0票数 1

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

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

这是我的代码:

代码语言:javascript
复制
string testString = "abcdefg12345中文";
int count = 0;
for (const auto &c : testString) {
    if (isdigit(c)) {
        ++count;
    }
}

下面是断言:

​

​

EN

回答 1

Stack Overflow用户

发布于 2017-04-21 23:44:20

<ctypes.h>中的isdigit()和相关函数/宏需要一个从unsigned char或EOF转换而来的int,这在大多数系统中表示0-255范围内的值(对于EOF,则为-1 )。因此任何不在-1\f25…-1\f6范围内的值255不正确。

问题1:您正在传递一个char,它在您的系统上的范围是-128…+127。这个问题的解决方案很简单:

代码语言:javascript
复制
if (isdigit(static_cast<unsigned char>(c)))

这不会崩溃,但是,它不是很正确的中文字符。

问题2:非ASCII码字符应该改用iswdigit()。这将正确处理中文字符:

代码语言:javascript
复制
wstring testString = L"abcdefg12345中文";
int count = 0;
for (const auto &c : testString) {
    if (iswdigit(c)) {
        ++count;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43544690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档