BlackGoddess a écrit :
y a-t-il un moyen de comparer deux chaines std::string sans prendre compte de la casse ?
|
Le meilleur moyen que je connaisse est exposé dans le livre Exceptional C++ de Herb Sutter. Il faut juste définir une nouvelle classe de 'traits' (le deuxième argument template de basic_string) et de créer tes chaînes ainsi : std::basic_string<char,mon_chartraits>.
Tu peux la transformer en majuscule... Deux moyens que je tire de cette page :
Code :
- std::transform(s.begin(), s.end(), s.begin(), static_cast<int(*)(int)>(std::toupper));
|
ou (qui marche pour tous les types)
Code :
- template <typename T>
- T to_upper(T c)
- {
- return std::use_facet<std::ctype<T> >(std::locale()).toupper(c);
- }
- std::transform(s.begin(), s.end(), s.begin(), to_upper<T> );
|
-- Edit --
[:grilled:] J'avais pas vu la recherche...
Sinon pour ceux qui veulent, l'article de newsgroup qui a inspiré cette partie du bouquin peut se trouver ici
Message édité par gatorette le 09-09-2003 à 23:55:24
---------------
each day I don't die is cheating