Я пытался определить, является ли определенный wchar_t
цифрой в соответствии с текущим языковым стандартом.Обнаружение чувствительной к языку цифры в C
Сначала я попытался использовать iswdigit
, но потом понял, что он возвращает 1
для 0-9
, так что он не является локальным.
Затем я попытался сделать 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, без внешних библиотек? Или я просто привинчен?
Возможно, вы захотите посмотреть [здесь] (https://www.gnu.org/software/libc/manual/html_node/Classification-of-Wide-Characters.html) –