我有一个字符串,我想检查内容是英文还是印地文(我的本地语言)。我发现印地文字符的unicode范围来自U0900-U097F。
查找字符串是否包含此范围内的任何字符的最简单方法是什么?
我可以使用std :: string或Glib :: ustring,具体取决于哪个方便。
答案 0 :(得分:2)
以下是使用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;
答案 1 :(得分:1)
第一步是编写一个仿函数来判断给定的wchar_t是否为印地语。这将(来自)std::unary_function<wchar_t, bool>
。实施是微不足道的: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%的世界人口来说,这应该仍然足够。
您需要在I / O上转换为/到UTF-8,但“one character = one wchar_t”的优势很大。例如,std::wstring::substr()
将合理地运作。但是,您可能仍然遇到像U + 094B(DEVANAGARI VOWEL SIGN O)这样的“字符”问题。迭代std :: wstring时,它本身就是一个字符,而不是一个修饰符。这仍然比使用UTF-8的std :: string更好,你最终会迭代U + 094B的各个字节。仅举几个原始示例,UTF8(U+094B)
中的所有字节都没有为印地语保留。
答案 2 :(得分:1)