昨天我问了一个类似的问题,但我知道我需要以不同的方式重新讨论它。

简而言之: 在Windows上的C ++中,当字符串采用unicode格式(wide char,wchar_t)时,如何对字符串(在另一个字符串内)进行不区分大小写的搜索,并且我不知道字符串的语言。我只是想知道针是否存在于大海捞针中。针的位置与我无关。

背景: 我有一个包含大量电子邮件正文的存储库。这些消息使用不同的语言(日语,德语,俄语,芬兰语;您可以命名)。所有数据都是Unicode格式,我将它加载到我的C ++应用程序中的宽字符串(wchar_t)(正文已被MIME解码,因此在我的调试器中我可以看到实际的日语,德语字符)。我不知道消息的语言,因为电子邮件消息不包含该细节,单个电子邮件正文也可能包含多种语言的字符。

我正在寻找像wcsstr这样的东西,但能够以不区分大小写的方式进行搜索。我知道在不知道文本语言的情况下,不可能从大写到小写进行100%正确的转换。我想要一个可以在99%的情况下工作的解决方案。

我正在使用带有C ++,STL和Boost的Visual Studio 2008。

有帮助吗?

解决方案

Boost String Algorithms有一个 icontains( )功能模板,可以做你需要的。

其他提示

您必须指定语言以进行不区分大小写的比较。例如在土耳其语中,'i'不是与'I'对应的小写字母。如果似乎没有指定语言,则使用隐式选择的语言进行比较。

您应该使用 ICU库,它支持遵循Unicode规则的Unicode正则表达式用于不区分大小写的匹配。该库以C / C ++和Java库的形式提供。许多其他语言(如Python)支持ICU库的包装器。

你可以将needle和haystack转换为小写(或大写),然后执行wcsstr()。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top