Microsoft Research Акселератор была библиотекой GP GPU.NET.
Вот как это сделать с Glib :: ustring:
using Glib::ustring;
ustring x("सहस"); // hindi string
bool is_hindi = false;
for (ustring::iterator i = x.begin(); i != x.end(); i ++)
if (*i >= 0x0900 && *i <= 0x097f)
is_hindi = true;
Первым шагом является написание функтора, чтобы определить, является ли данный wchar_t хинди. Это будет (производным от) a std :: unary_function
. Реализация тривиальна: return c> = 0x0900 && c <0x980;
. Второй шаг - использовать его: std :: find_if (begin, end, is_hindi ())
.
Поскольку вам понадобится Unicode, вам, вероятно, следует использовать wchar_t
и, следовательно, std :: wstring
. Ни std :: string
, ни GLib :: ustring
не поддерживают собственно Unicode. В некоторых системах (в частности, Windows) реализация wchar_t
ограничена Unicode 4 = 16 бит, но этого должно быть достаточно для 99,9% населения мира.
Вам потребуется преобразовать из / в UTF-8 при вводе-выводе, но преимущество «один символ = один wchar_t» велико. Например, std :: wstring :: substr ()
будет работать разумно. Однако у вас все еще могут быть проблемы с такими «символами», как U + 094B (DEVANAGARI VOWEL SIGN O). При итерации по std :: wstring он будет выглядеть как символ вместо модификатора. Это все же лучше, чем std :: string с UTF-8, где вам придется перебирать отдельные байты U + 094B. И если взять только ваши оригинальные примеры, ни один из байтов в UTF8 (U + 094B)
не зарезервирован для хинди.
UTF8 (U + 094B)
не зарезервирован для хинди. При итерации по std :: wstring он будет выглядеть как символ вместо модификатора. Это все же лучше, чем std :: string с UTF-8, где вам придется перебирать отдельные байты U + 094B. Возьмем только исходные примеры: ни один из байтов в UTF8 (U + 094B)
не зарезервирован для хинди. Если строка уже закодирована как UTF-8, я бы не преобразовывал ее в UTF-16 (я предполагаю, что MSalters называет это «собственно Unicode»), а перебираю кодировку UTF-8. строка и проверьте, есть ли в ней символ хинди.
Используя std :: string, вы можете легко выполнить итерацию с помощью библиотеки UTF8-CPP : - взгляните на utf8 :: next () или класс итератора.
GLib :: ustring имеет итератор , который, кажется, обеспечивает ту же функциональность (не пробовал):