gpt4 book ai didi

c - 在 C 中检测区域设置敏感数字

转载 作者:太空宇宙 更新时间:2023-11-04 03:26:53 26 4
gpt4 key购买 nike

我一直在尝试根据当前语言环境检测某个 wchar_t 是否被视为数字。

起初,我尝试使用 iswdigit,但后来我意识到它只为 0-9 返回 1,所以它不是完全对语言环境敏感。

然后我尝试做 iswalnum(c) && !isalpha(c):

#include <locale.h>
#include <wchar.h>
#include <wctype.h>
#include <stdio.h>

int main() {
wchar_t c = L'٠'; // U0660: Arabic-Indic Digit 0
int len;
setlocale(LC_ALL, "");
printf("%d\n", iswalnum(c) && !iswalpha(c)); // Prints 1.
return 0;
}

据推测,如果字符通过字母或数字测试但未通过数字测试,则这只会是 1。唯一的问题是,iswalpha(c) 出于某种神秘原因返回 1

这引出了我的问题:有没有一种方法可以仅使用标准 C 或 POSIX,而不使用外部库,以区域设置敏感的方式检查字符是否为数字?还是我被搞砸了?

最佳答案

无论语言环境如何,C 语言只允许在 digit 中使用字符类是字符 '0' , '1' , '2' , ... '9'具有值 '0'+0 , '0'+1 , '0'+2 , ..., '0'+9 .如果您想要更高级别的语义信息,了解哪些内容可能会被人类使用与区域设置匹配的文化习俗解释为数字或其他数字形式,您需要一个更高级别的语义库。

至于为什么iswalnum(c) && !iswalpha(c)没用,alnum类定义为 alpha 的并集和 digit .现有的语言环境作者实践将标准十进制以外的“数字”放在 alpha 中上课仅仅是因为它是最不令人惊讶的路径,并且至少 alnum那么有道理。

关于c - 在 C 中检测区域设置敏感数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40470758/

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