[STL] class string et comparaison non case-sensitive

class string et comparaison non case-sensitive [STL] - C++ - Programmation

Marsh Posté le 03-06-2003 à 01:37:14    

Bon, je sais que pour faire une comparaison entre deux chaines on fait

Code :
  1. string a = "chaine 1":
  2. string b = "chaine 2";
  3. if(a == b)
  4.   cout << "c'est égal";
  5. else
  6.   cout << "c'est pas égal";


 
Mais si je veux faire une comparaison qui tient pas compte de la casse ?
j'ai trouvé ca:

Code :
  1. transform(a.begin(), a.end(), a.begin(), tolower);

avec un

Code :
  1. #include <algorithm>


Comme ca, je met ma chaine a en minuscules, idem pour la b, et je compare joyeusement.
Le problème: bah ca modifie mes 2 chaines, et je voudrais faire une comparaison sans altérer mes 2 chaines.
 
Une solution ? :D

Reply

Marsh Posté le 03-06-2003 à 01:37:14   

Reply

Marsh Posté le 03-06-2003 à 08:11:10    

c'est un problème qui parait simple et qui est pourtant loin de l'être... Il n'y a qu'a voir le nombre d'articles à ce sujet pour comprendre. Une petite recherche sur google s'impose.
 
Si tu n'utilises que que de l'anglais, alors tu peux utiliser une méthode du type:

Code :
  1. strcasecmp(a.c_str(), b.c_str())


(sous win32, la fonction ne s'appelle pas strcasecmp, mais je ne me souviens plus).
Je sais, c'est une fonction C, mais c'est encore ce qu'il y a de plus simple je trouve.
Après, si tu dois pouvoir utiliser d'autres encodages, c'est moins simple.
Tu peux regarder du côté de la fonction template lexicographical_compare qui fait partie de la STL. Regardes aussi ce qui concerne std::locale ainsi que la fonction template std::use_facet.

Reply

Marsh Posté le 03-06-2003 à 08:18:34    

sowhatin22 : stricmp pour la fonction win

Reply

Marsh Posté le 03-06-2003 à 08:25:09    

vous vous foutez de la gueule du monde là! et puis les string C++ peuvent contenir de 0
 
 
http://forum.hardware.fr/forum2.ph [...] subcat=386
ma version et celle ce gloop sont tres satisfaisantes

Reply

Marsh Posté le 03-06-2003 à 08:57:16    

++Taz a écrit :

vous vous foutez de la gueule du monde là! et puis les string C++ peuvent contenir de 0
 
 
http://forum.hardware.fr/forum2.ph [...] subcat=386
ma version et celle ce gloop sont tres satisfaisantes


 
D'habitude tes interventions sont bien mais là j'ai du mal à suivre ton raisonement...
 
Si non  [:blueflag] le sujet m'intéresse :D


---------------
Le Tyran
Reply

Marsh Posté le 03-06-2003 à 12:36:07    

:heink: je comprends pas?  mon lien il est bon? le seul à rajouter, c'est encapsuler cette fonction dans un objet. la solution du transforme marche, mais elle oblige à dupliquer les chaine, ce qui est assez mauvais pour une comparaision rapide

Reply

Marsh Posté le 03-06-2003 à 12:41:32    

++Taz a écrit :

:heink: je comprends pas?  mon lien il est bon? le seul à rajouter, c'est encapsuler cette fonction dans un objet. la solution du transforme marche, mais elle oblige à dupliquer les chaine, ce qui est assez mauvais pour une comparaision rapide


 
Désolé ça aparaissait pas chez moi, là je suis au boulot et je vois le lien, pardon  :jap:


Message édité par LetoII le 03-06-2003 à 12:41:50

---------------
Le Tyran
Reply

Sujets relatifs:

Leave a Replay

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