如何在Unicode字符串中查找不能成为单词一部分的字符?

时间:2011-06-23 14:27:59

标签: c++ unicode

我在字符串中有一些文本,我需要检查该特定字符串是否包含任何不允许创建单词的字符。

假设我有“(hello}”

之类的文字

这里它包含符号'('和'}'。我怎么能用C ++做呢。字符串可能包含任何unicode字符。

3 个答案:

答案 0 :(得分:4)

如果字符串确实包含Unicode(UTF-8),那么问题就在于此 非平凡;你可能想要使用一些外部库,比如 ICU。或者您可以转换为wchar_twstring),然后使用单曲 下面的字节编码解决方案:

如果字符是单字节编码,则std::find_if使用 合适的谓词应该做到这一点。如果你正在做任何文字 解析时,你需要定义一组这样的谓词,一次和for 所有;谓词可以使用std::ctype方面的函数 locale,或wctype.h中的'\''(使用全局区域设置)。

但是,如果你正在处理Unicode,甚至转换为宽 字符可能不够,因为完整的Unicode仍然可以使用多个 一个代码点代表一个字符。真正的问题是 你想要做多严肃(请注意,在许多语言中, 像英语或法语,“单词”可以包含Unicode的字符 考虑标点符号,例如“不要”或“aujourd'hui” - Unicode 表格会告诉您{{1}}是标点符号,而不是单词的一部分。)

答案 1 :(得分:1)

std::isalpha(以及相关的is*朋友)会对字符类型进行模板化,并接受语言环境以提供更好的本地化能力。我只是迭代stringwstring并使用is*函数来指示您感兴趣的行为(我不知道您想要允许哪些字符并且不接受问题陈述。)

答案 2 :(得分:0)

使用std::wstringstd::iswalpha()