[C++/STL] string comparisons

Pagina: 1
Acties:

  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
Hey.. Is het met de STL string class uberhaupt mogelijk om case insensitive comparisons te doen? De compare functie en de overloaded == operator zijn alleen case sensitive, en met google kom ik ook niet echt verder... is het nou helemaal niet mogelijk? Dat zuigt dan best wel... :(
Mocht iemand weten of het kan, en ook hoe het kan, dan zou ik enige hulp zeer op prijs stellen :)

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


Verwijderd

Stroustrup geeft ons de volgende functie (20.3.8 3e editie)
code:
1
2
3
4
5
6
7
8
9
10
11
12
 int cmp_nocase(const string& s, const string& s2)
  {
     string::const_iterator p = s.begin();
     string::const_iterator p2 = s2.begin();
     while (p != s.end() && p != s2.end())
     {
       if (toupper(*p) != toupper(*p2))
         return (toupper(*p) < toupper(*p2)) ? -1 : 1;
       ++p, ++p2;
     }
     return s2.size() - s.size();
  }

Niet getest, maar ik gok er op dat 't werkt :Y)

  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
Op maandag 27 mei 2002 00:18 schreef Yarvieh het volgende:
Stroustrup geeft ons de volgende functie (20.3.8 3e editie)
code:
1
2
3
4
5
6
7
8
9
10
11
12
 int cmp_nocase(const string& s, const string& s2)
  {
     string::const_iterator p = s.begin();
     string::const_iterator p2 = s2.begin();
     while (p != s.end() && p != s2.end())
     {
       if (toupper(*p) != toupper(*p2))
         return (toupper(*p) < toupper(*p2)) ? -1 : 1;
       ++p, ++p2;
     }
     return s2.size() - s.size();
  }

Niet getest, maar ik gok er op dat 't werkt :Y)
Fantastisch! Ook maar eens dat boek kopen.. :) Bedankt!

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


Verwijderd

Op maandag 27 mei 2002 00:33 schreef _Mo_ het volgende:
Fantastisch! Ook maar eens dat boek kopen.. :) Bedankt!
Mwha 't is voornamelijk handig als naslag werk (eigenlijk alleen maar) echt lekker op de bank zitten en er 'n beetje in lezen zit er niet echt in met dat boek..

Verwijderd

Eigenlijk vind ik het mooier om std::equal te gebruiken met een eigen predicate:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <algorithm>
#include <string>
#include <cctype>

bool lowercaseCompare (int a, int b)
{
  return std::tolower(a) == std::tolower(b);
}

int main ()
{
  std::string a ("breezer"), b ("BrEeZeR");

  if (std::equal(a.begin(), a.end(), b.begin(), lowercaseCompare))
    ; // equal
}

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 07-09 08:58
Op maandag 27 mei 2002 00:14 schreef _Mo_ het volgende:
Hey.. Is het met de STL string class uberhaupt mogelijk om case insensitive comparisons te doen? De compare functie en de overloaded == operator zijn alleen case sensitive, en met google kom ik ook niet echt verder... is het nou helemaal niet mogelijk? Dat zuigt dan best wel... :(
Mocht iemand weten of het kan, en ook hoe het kan, dan zou ik enige hulp zeer op prijs stellen :)
Berucht moeilijk, case-insensitive comparison.

Is "ß" (duitse ss) gelijk aan "ss"? Wel als je de conversion in via uppercase doet, niet als je het via lowercase doet. Het correcte antwoord is, "wat bedoel je eigenlijk met case-insenstitive comparison?".

Er is een document dat beschrijft hoe het moet, maar da's 200+ pagina's (dacht ik). Bovendien bestond het nog niet toen C++ standaard werd.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 06-09 22:39
Moest je niet een eigen locale maken om case insensitive te vergelijken?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 07-09 08:58
Op maandag 27 mei 2002 11:19 schreef farlane het volgende:
Moest je niet een eigen locale maken om case insensitive te vergelijken?
Kwam het wel op neer, want "case-insensitive means what you define it to mean".

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1