Question

J'ai posé une question similaire hier, mais je reconnais que je dois la reformuler de manière différente.

En bref: En C ++ sous Windows, comment effectuer une recherche d'une chaîne (dans une autre chaîne) sans tenir compte de la casse, lorsque les chaînes sont au format Unicode (caractère étendu, wchar_t) et que je ne connais pas la langue des chaînes. Je veux juste savoir si l'aiguille existe dans la botte de foin. La position de l'aiguille ne me concerne pas.

Contexte: J'ai un référentiel contenant beaucoup de corps d'emails. Les messages sont dans différentes langues (japonais, allemand, russe, finlandais; vous le nommez). Toutes les données sont au format Unicode et je les charge en chaînes larges (wchar_t) dans mon application C ++ (les corps ont été décodés MIME, de sorte que dans mon débogueur, je peux voir les caractères japonais et allemands actuels. Je ne connais pas la langue des messages, car ceux-ci ne contiennent pas ces détails. De plus, un seul corps d'e-mail peut contenir des caractères de plusieurs langues.

Je cherche quelque chose comme wcsstr, mais avec la possibilité de faire la recherche sans tenir compte de la casse. Je sais qu'il n'est pas possible de convertir à 100% de majuscules en minuscules sans connaître la langue du texte. Je veux une solution qui fonctionne dans 99% des cas où cela est possible.

J'utilise Visual Studio 2008 avec C ++, STL et Boost.

Était-ce utile?

La solution

Boost String Algorithms contient un icontains ( ) modèle de fonction pouvant faire ce dont vous avez besoin.

Autres conseils

Vous devez spécifier le langage dans lequel effectuer la comparaison sans tenir compte de la casse. Par exemple, en turc, "i" n'est PAS la lettre minuscule correspondant à "I". Si la langue semble ne pas être spécifiée, la comparaison est effectuée avec une langue sélectionnée implicitement.

Vous devez utiliser la bibliothèque ICU , qui prend en charge les expressions régulières Unicode conformes aux règles Unicode. pour la correspondance insensible à la casse. La bibliothèque est disponible en tant que bibliothèques C / C ++ et Java. De nombreux autres langages tels que Python prennent en charge un wrapper pour les bibliothèques ICU.

vous pouvez convertir les deux types d'aiguille et de botte de foin en minuscule (ou majuscule), puis effectuez wcsstr ().

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top