Как проверить в 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
Ты можешь использовать 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
Вы можете найти языковые строки здесь:
Для решения по принципу «сделай сам» я бы ожидал что-то вроде этого:
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();
}
Есть также библиотека ICU, имеющая ublock_getCode функция. Обратите внимание, что вы не можете сказать точный язык, так как одни и те же буквы используются в разных алфавитах.