繁体   English   中英

如何查找无法成为Unicode字符串中单词一部分的字符?

[英]How to find characters that cannot be part of a word in a Unicode string?

我的字符串中有一些文本,我需要检查特定的字符串是否包含任何不允许发音的字符。

假设我有类似“(hello}”的文字

在这里它包含符号'('和'}',如何在C ++中实现,而字符串可以包含任何Unicode字符。

如果该字符串确实包含Unicode(UTF-8),则该问题肯定很简单; 您可能需要使用一些外部库,例如ICU。 或者,您可以转换为wchar_twstring ),并使用以下单字节编码解决方案:

如果字符是单字节编码的, std::find_if具有合适谓词的std::find_if应该可以解决问题。 如果您要进行任何文本解析,则需要一劳永逸地将其定义为此类谓词的集合。 谓词可以使用localestd::ctype方面中的函数,也可以使用wctype.h的函数(使用全局语言环境)。

不过,如果您要处理Unicode,即使转换为宽字符也可能不够,因为完整Unicode仍可以使用多个代码点来表示单个字符。 真正的问题是您想要这样做有多认真。 (也请注意,在许多语言中,例如英语或法语,“单词”可以包含Unicode认为标点的字符,例如“不要”或“ aujourd'hui” — Unicode表将告诉您'\\''为标点,而不是单词的一部分。)

std::isalpha (和相关的is*朋友)在字符类型上进行了模板化,并接受语言环境以实现更好的本地化能力。 我只是遍历stringwstring并使用is*函数来表示您感兴趣的行为(我不能说出您要允许和禁止从问题陈述中选择哪些字符)。

使用std::wstringstd::iswalpha()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM