La première étape consiste à écrire un foncteur pour déterminer si un wchar_t donné est Hindi. Ce sera (dérivé de) un std::unary_function<wchar_t, bool>
. La mise en œuvre est triviale: return c>= 0x0900 && c < 0x980;
. La deuxième étape est l'utiliser: std::find_if(begin, end, is_hindi())
.
Puisque vous aurez besoin d'Unicode, vous devriez probablement utiliser wchar_t
et donc std::wstring
. Ni std::string
ni GLib::ustring
ne prennent en charge Unicode correctement. Sur certains systèmes (Windows en particulier) l'implémentation de wchar_t
est restreinte à Unicode 4 = 16 bits mais cela devrait être suffisant pour 99,9% de la population mondiale.
Vous aurez besoin de convertir de/vers UTF-8 sur E/S, mais l'avantage de "un caractère = un wchar_t" est grand. Par exemple, std::wstring::substr()
fonctionnera raisonnablement. Vous pourriez toujours avoir des problèmes avec des "caractères" comme U + 094B (DEVANAGARI VOWEL SIGN O), cependant. Lorsque vous itérez sur un std :: wstring, cela apparaîtra comme un caractère par lui-même, au lieu d'un modificateur. C'est toujours mieux que std :: string avec UTF-8, où vous finiriez par itérer sur les octets individuels de U + 094B. Et pour ne prendre que vos exemples d'origine, aucun des octets de UTF8(U+094B)
n'est réservé à Hindi.
Qu'est-ce l'encodage que vous utilisez? – AraK
J'utilise UTF-8. – Pallavi