又是一个简单的问题:有一个std::string
,根据用户的语言和区域设置(区域设置)确定哪些字符是数字、符号、空格等。
我设法使用以下命令将字符串拆分为一组字符boost 区域设置边界分析工具 http://www.boost.org/doc/libs/1_55_0/libs/locale/doc/html/boundary_analysys.html:
std::string text = u8"生きるか死ぬか";
boost::locale::boundary::segment_index<std::string::const_iterator> characters(
boost::locale::boundary::character,
text.begin(), text.end(),
boost::locale::generator()("ja_JP.UTF-8"));
for (const auto& ch : characters) {
// each 'ch' is a single character in japanese language
}
然而,我还没有看到任何方法来确定是否ch
是数字、符号或其他任何东西。
有boost字符串分类算法 http://www.boost.org/doc/libs/1_53_0/doc/html/string_algo/reference.html#header.boost.algorithm.string.classification_hpp,但这些似乎不起作用......无论如何*segment_index::iterator
is.
我也不能申请std::isalpha(std::locale) http://en.cppreference.com/w/cpp/locale/isalpha,因为我不确定是否可以将升压段转换为char
or wchar_t
.
有什么简洁的方法来对符号进行分类吗?
有许多函数和对象支持这一点<locale>
但是...您给出的示例文本看起来像 UTF-8,
这是一种多字节编码,并且函数<locale>
不适用于多字节编码。
我建议你获取 ICU 库并使用它。其中
事物,它允许测试中定义的所有属性
Unicode 字符数据库。它还具有宏或函数
用于迭代一个字符串(或至少一个数组)char
),
一次提取一个 UTF_32 代码点(这就是您想要的
想要测试)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)