我在字符串中有一些文本,我需要检查该特定字符串是否包含任何不允许构成单词的字符。
假设我有类似"(hello}"的文本
这里它包含符号"("和"}"。我怎么能在C++做到。字符串可以包含任何 unicode 字符。
如果字符串确实包含 Unicode (UTF-8(,那么问题肯定是非平凡;您可能希望使用一些外部库,例如重症监护室。 或者您可以转换为wchar_t
(wstring
(,并使用单曲字节编码解决方案如下:
如果字符是单字节编码的,则std::find_if
合适的谓词应该可以解决问题。 如果您正在执行任何文本解析时,您需要一劳永逸地定义为此类谓词的集合都;谓词可以使用 std::ctype
方面的函数 locale
,或 wctype.h
中的那些(使用全局区域设置(。
不过,如果您正在处理Unicode,甚至可以转换为广泛的字符可能还不够,因为完整的 Unicode 仍然可以使用超过一个代码点表示单个字符。 真正的问题是你想做这件事有多认真。 (另请注意,在许多语言中,像英语或法语一样,"单词"可以包含 Unicode 的字符考虑标点符号,例如"don't"或"aujourd'hui"——Unicode表格会告诉你'''
是标点符号,而不是单词的一部分。
std::isalpha
(以及相关的is*
朋友(在字符类型上模板化,并接受区域设置以允许更好的本地化能力。我只会遍历string
或wstring
,并使用指示您感兴趣的行为的is*
函数(我无法判断您希望在问题陈述中允许和不允许哪些字符(。
使用 std::wstring
和 std::iswalpha()
。