Вопрос

Вчера я задавал аналогичный вопрос, но признаю, что мне нужно сформулировать его по-другому.

Короче говоря:В C ++ в Windows, как мне выполнить поиск строки без учета регистра (внутри другой строки), когда строки находятся в формате unicode (wide char, wchar_t), и я не знаю языка строк.Я просто хочу знать, существует ли иголка в стоге сена.Расположение иглы для меня не имеет значения.

Предыстория:У меня есть репозиторий, содержащий множество электронных писем.Сообщения на разных языках (японский, немецкий, русский, финский;вы называете это сами).Все данные находятся в формате Unicode, и я загружаю их в широкие строки (wchar_t) в моем приложении на C ++ (тела были MIME-декодированы, поэтому в моем отладчике я могу видеть фактические японские и немецкие символы).Я не знаю языка сообщений, поскольку сообщения электронной почты не содержат таких подробностей, кроме того, одно и то же электронное письмо может содержать символы с нескольких языков.

Я ищу что-то вроде wcsstr, но с возможностью выполнять поиск без учета регистра.Я знаю, что невозможно выполнить 100% правильное преобразование из верхнего регистра в нижний, не зная языка текста.Мне нужно решение, которое работает в 99% случаев, когда это возможно.

Я использую Visual Studio 2008 с C ++, STL и Boost.

Это было полезно?

Решение

Алгоритмы Boost String имеют icontains() иконки () шаблон функции, который может делать то, что вам нужно.

Другие советы

Вы должны указать язык для сравнения без учета регистра.Например, в турецком языке "i" - это НЕ строчная буква, соответствующая "I".Если язык, по-видимому, не указан, значит, сравнение выполняется с неявно выбранным языком.

Вы должны использовать Библиотека отделения интенсивной терапии который обеспечивает поддержку регулярных выражений Unicode, которые следуют правилам Unicode для сопоставления без учета регистра.Библиотека доступна в виде библиотек C / C ++ и Java.Многие другие языки, такие как Python, поддерживают оболочку для библиотек ICU.

вы могли бы преобразовать как "иголку", так и "стог сена" в нижний (или верхний регистр), затем выполнить wcsstr().

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top