является эквивалентом <thing> для char32_t

Есть ли эквиваленты для функций char (ispace, isalpha и т. Д.), Определенных в <ctype> за char32_t?

Я осмотрелся и смог увидеть только iswspace (и связанные), которые, похоже, предназначены для 16-битных символов.

Примечание: в то время как isspace принимает в качестве параметра int, кажется, что для символов Unicode возникают ошибочные результаты.

Пример:

char32_t dagger = U'';
if (isspace(dagger)) {
    puts("That is a space!");
}

Будет выведено "Это пробел!"

2 ответа

Решение

Вплоть до wchar_tвы можете использовать std::isalpha с подходящей локалью, определенной в<locale>.

Для всего, что выше 0xFFFF, вам понадобится библиотека ICU:

u_isalpha или u_isUAlphabetic

u_isspace или u_isUWhiteSpace

Полный список функций: uchar.h

В то время как C++- язык имеет средства для генерации значений Unicode, C++-the-library почти полностью глух к Unicode. <ctype.h> а также <cctype>понятия не имею, как обрабатывать значения Unicode; их функциональность основана на механизме С локали. Ваша реализация может предоставлять локали, которые знают, что такое Юникод, но"C" локаль по умолчанию не входит в их число.

Другие вопросы по тегам