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



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

假设我有类似"(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*朋友(在字符类型上模板化,并接受区域设置以允许更好的本地化能力。我只会遍历stringwstring,并使用指示您感兴趣的行为的is*函数(我无法判断您希望在问题陈述中允许和不允许哪些字符(。

使用 std::wstringstd::iswalpha()

最新更新