std::string et majuscule/minuscule

std::string et majuscule/minuscule - C++ - Programmation

Marsh Posté le 09-09-2003 à 22:35:49    

y a-t-il un moyen de comparer deux chaines std::string sans prendre compte de la casse ?
 
sinon, y a-t-il moyen de transformer un chaine en minuscule ?


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 09-09-2003 à 22:35:49   

Reply

Marsh Posté le 09-09-2003 à 22:46:35    

Y'a toujours un moyen de le faire si tu le codes toi meme :D
 
Sinon une bonne reference sur le sujet (meme si ce n'est qu'une implementation) :
 
http://www.sgi.com/tech/stl/
 

Reply

Marsh Posté le 09-09-2003 à 22:47:47    

ou fais une recherche, on avait déjà beaucoup parlé

Reply

Marsh Posté le 09-09-2003 à 22:52:17    

altac a écrit :


Sinon une bonne reference sur le sujet (meme si ce n'est qu'une implementation).


 
boarf, initialement ce furent deux chercheurs employés chez sgi qui ont la paternité de la stl.


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 09-09-2003 à 22:58:38    

dsl, pour avoir 'oublié' la recherche...
 
pour ceux qui veulent :
 
http://forum.hardware.fr/forum2.ph [...] subcat=386


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 09-09-2003 à 23:11:30    

SchnapsMann a écrit :


 
boarf, initialement ce furent deux chercheurs employés chez sgi qui ont la paternité de la stl.


 
Il n'empeche qu'il y a certaines differences entre la STL SGI et le standard. C'est certainement le cas pour toutes les implementations, mais c'est mieux d'en etre conscient.

Reply

Marsh Posté le 09-09-2003 à 23:16:53    

altac a écrit :


 
Il n'empeche qu'il y a certaines differences entre la STL SGI et le standard. C'est certainement le cas pour toutes les implementations, mais c'est mieux d'en etre conscient.
 


 
bah oui, mais si possible stlport est là [:zorro]


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 09-09-2003 à 23:33:25    

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>.
 

BlackGoddess a écrit :

sinon, y a-t-il moyen de transformer un chaine en minuscule ?


Tu peux la transformer en majuscule... Deux moyens que je tire de cette page :

Code :
  1. std::transform(s.begin(), s.end(), s.begin(), static_cast<int(*)(int)>(std::toupper));


ou (qui marche pour tous les types)

Code :
  1. template <typename T>
  2. T to_upper(T c)
  3. {
  4. return std::use_facet<std::ctype<T> >(std::locale()).toupper(c);
  5. }
  6. 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
Reply

Marsh Posté le 09-09-2003 à 23:48:08    

pas la peine, on a déjà montrer que la simple rédaction d'un petit comparateur suffit, ce qui ne génère pas de copie

Reply

Marsh Posté le 09-09-2003 à 23:50:23    

le seul probleme de la méthode de Sutter c'est qu'en creant une nouvelle classe tu la rends incompatible avec l'ancienne classe
(et de plus il n'y a pas de polymorphisme par héritage dans la STL de base).
 
Bref une solution qui reposerait sur la basic string de base (arf) est pas mal du tout ;)
(euh je ne veux pas entendre parler de cast sale ;) )
 
LeGreg

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed