1

我昨天问了一个类似的问题,但认识到我需要以不同的方式重新调整它。

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

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

我正在寻找类似 wcsstr 的东西,但能够以不区分大小写的方式进行搜索。我知道在不知道文本语言的情况下,不可能 100% 正确地从大写字母转换为小写字母。我想要一个在 99% 的情况下都可行的解决方案。

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

4

4 回答 4

4

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

于 2009-10-24T21:38:54.723 回答
1

Boost String Algorithms 有一个icontains()函数模板,可以满足你的需要。

于 2009-10-24T12:36:11.593 回答
0

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

于 2009-10-24T12:44:14.900 回答
0

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

于 2009-10-24T21:17:12.910 回答