Как проверить, является ли символ буквой какого-то алфавита?

Как проверить в C ++, является ли символ буквой какого-то алфавита?
Вообще мне нужно что-то вроде этого:

bool is_german(wchar_t ch);
bool is_russian(wchar_t ch);
bool is_japanese(wchar_t ch);

и так далее.

РЕДАКТИРОВАТЬ 1. Могу ли я сделать это без определения всех наборов символов всех языков, которые мне нужны. Или, может быть, есть какая-то библиотека, которая имеет что-то вроде этого:

std :: vector alphabet = GetEnglishAlphabet (); // алфавит =
{L’a ‘, L’b’, L’c ‘, …}

РЕДАКТИРОВАТЬ 2. Если кто-то заинтересован, я нашел

Скрипт QChar :: script () const

1

Решение

Ты можешь использовать std::isalpha определяется в <locale>, Не забудьте сначала установить правильную локаль
http://www.cplusplus.com/reference/locale/isalpha/

РЕДАКТИРОВАТЬ:

std::locale loc("en-US");
bool isAlpha1 = std::isalpha('a', loc);
bool isAlpha2 = std::isalpha('&', loc);
bool isAlpha3 = std::isalpha('1', loc);
bool isAlpha4 = std::isalpha('Ж', loc); //cyrilic alphabet, but not US

Вы можете найти языковые строки здесь:

http://msdn.microsoft.com/en-us/library/39cwe7zf.aspx

http://msdn.microsoft.com/en-US/goglobal/bb896001.aspx

1

Другие решения

Для решения по принципу «сделай сам» я бы ожидал что-то вроде этого:

vector<wchar_t> german = {... german chars ...};
vector<wchar_t> japanese = {... japanese chars ...};
vector<wchar_t> russian = {... russian chars ...};

bool is_in_alphabet(const vector<wchar_t>& language, wchar_t candidate) {
return std::find(language.begin(), language.end(), candidate) != language.end();
}
2

Есть также библиотека ICU, имеющая ublock_getCode функция. Обратите внимание, что вы не можете сказать точный язык, так как одни и те же буквы используются в разных алфавитах.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector