String vergleichen ohne Groß/Kleinschreibung zu berücksichtigen
-
cvcv schrieb:
Du musst dir selber eine Funktion dafür schreibe und dann diese in Zukunft benutzen. Ich wüsste nicht, was daran so schlimm ist?
Ob das schlimm ist, hängt vor allem davon ab wie vollständig man es haben möchte. Für rein englischsprachige Texte ist es z.B. simpel genug. Wenn die Strings allerdings z.B. in UTF-8 vorliegen, wird es schon bei Deutsch etwas komplizierter, da es z.B. für Umlaute nicht mehr ausreicht einen einzelnen
char
in einen anderen umzuwandeln. Spätestens jedoch wenn ich den vollständigen Unicode-Zeichensatz korrekt unterstützen möchte (mit all den Sonderregeln die es für andere Sprachen und Alphabete geben mag), würde ich persönlich lieber auf etwas Fertiges zurückgreifen.Finn
-
Wie wäre es mit
transform(to_modify.begin(), to_modify.end(), to_modify.begin(), tolower );
?
Deckt natürlich nicht deutsche Sonderzeichen und sowas ab.
-
volkard schrieb:
Ist das so?
Ja, ist es.
-
volkard schrieb:
Nicht zu vergessen Römerstraße == RoemerstaBe(nette Amis) == Roemerstrasse(Schweizer, oder?) == Römerstr.(psotalisch auch ok)
Du hast Romerstaβe (Japaner) vergessen.
-
Marthog schrieb:
Du hast Romerstaβe (Japaner) vergessen.
Wenn wir schon dabei sind: RÖMERSTRAẞE!!!11einself
-
boost::iequals
?
-
TGGC schrieb:
volkard schrieb:
Ist das so?
Ja, ist es.
Nö.
-
Schreib halt nichts, wenn du keine Ahnung davon hast. Es ist ein offensichtlicher Design-Fehler der C++ Lib das sich lower und upper Methoden nur auf code units beziehen.
-
cvcv schrieb:
Es gibt out of the box keine Implementierung davon.
Du musst dir selber eine Funktion dafür schreibe und dann diese in Zukunft benutzen. Ich wüsste nicht, was daran so schlimm ist?
Also ich finds schon traurig (== schlimm) dass so eine alte Sprache wie C++ immer noch keine vernünftigen Methoden für so elementare Sachen anbietet.
Es gibt ja noch nichtmal ein vernünftiges replace_all für strings...
Wenn ich nach einer Zeit C# wieder in C++ mit strings hantieren muss bin ich die ganze Zeit nur am fluchen weil man ständig das "Rad neu erfinden" muss
-
Ich finde man muss nicht alles gleich in den Sprachstandard aufnehmen. Wenn du solche Funktionen häufig brauchst schreib dir halt ne lib oder nutze Eine die das schon kann. Dann flucht man nur einmal.
-
happystudent schrieb:
Wenn ich nach einer Zeit C# wieder in C++ mit strings hantieren muss bin ich die ganze Zeit nur am fluchen weil man ständig das "Rad neu erfinden" muss
Wenn du dir nicht eine Funktion schreiben kannst, die das für dich erledigt bist du eher ein unlucky- and unhappystudent.
-
Braunstein schrieb:
Ich finde man muss nicht alles gleich in den Sprachstandard aufnehmen.
Naja, was heisst hier 'alles'?
Sowas wie regex ist im Standard, aber eine gefühlt viel allgemeinere Funktion wie string::replaceAll nicht.
ReplaceAll würde string sicherlich nicht unnötig aufblähen.
-
EOP schrieb:
Wenn du dir nicht eine Funktion schreiben kannst, die das für dich erledigt bist du eher ein
unlucky- and unhappystudent.Student ist man um zu lernen und nicht um schon alles zu können.
Das Problem ist ja nicht dass das schwierig wäre sondern dass das Benutzen der Sprache durch trivial zu lösende Dinge unnötig erschwert/verlangsamt wird.
Schließlich kosten auch diese Dinge Zeit (und damit im Zweifelsfall Geld). Und sind u.U. dann doch nicht so einfach zu lösen wie anfangs gedacht, siehe TE.
-
EOP schrieb:
Wenn du dir nicht eine Funktion schreiben kannst, die das für dich erledigt bist du eher ein unlucky- and unhappystudent.
Ich weiss nicht ob du vielleicht im Jahr 2015 immer noch in einer ASCII-Welt lebst, aber wenn ich mit den Unicode-Standard zum Thema Groß/Kleinschreibung und im besonderen "Case Folding" anschaue, wäre ich ganz froh darum, wenn die Standardbibliothek solche elementaren Funktionen unterstützen würde, und man sich dafür nicht so einen Moloch wie bspw. ICU bemühen, oder es gar selbst implementieren muss.
Wenn man wirklich nur ASCII benötigt, dann sind
std::toupper
und Konsorten eine gute Wahl, und man kann die Funktion durchaus selbst schreiben. Sobald man in exotischere Gefilde vorstößt - und das geht je nach Codierung schon bei der deutschen Sprache los - kommt man mitstd::toupper
nicht mehr wirklich weit.Finnegan
-
Finnegan schrieb:
wäre ich ganz froh darum, wenn die Standardbibliothek solche elementaren Funktionen unterstützen würde
Naja, ganz so elementar und trivial und global einsetzbar ist es eben dann wohl doch nicht.
Gibt es z.B. Im Arabischen oder Chinesischen überhaupt Groß- und Kleinschreibung?
Mit den 1200 verschiedenen indischen Schriften will ich gar nicht erst anfangen.Alles nicht so einfach.
-
Und vor allem ists erstmal ein wahnsinniger Overhead...
-
EOP schrieb:
Finnegan schrieb:
wäre ich ganz froh darum, wenn die Standardbibliothek solche elementaren Funktionen unterstützen würde
Naja, ganz so elementar und trivial und global einsetzbar ist es eben dann wohl doch nicht.
Gibt es z.B. Im Arabischen oder Chinesischen überhaupt Groß- und Kleinschreibung?
Mit den 1200 verschiedenen indischen Schriften will ich gar nicht erst anfangenMoment. Warst du nicht zuerst derjenige, der sowas gesagt hat wie dass man das mel eben selbst implementieren können sollte? :p
Und nebenbei, das hier sind die aktuellen Unicode-Case-Folding-Regeln:
Das ist jetzt nicht so viel, dass man es nicht in einer kompakten binären Form in der Standardbibliothek unterbringen könnte, allerdings zusammen mit dem im Standard beschriebenen Algorithmus doch zu viel, als dass es mal eben in eine Lambda-Funktion zur Stringverarbeitung passt, geschweige denn dass ich grosse lust verspüre, es selbst zu machen, nur weil ich eine korrekte "case-insensitive"-Suche benötige. Ich geben allerdings zu, dass wenn man auch noch anderen Unicode-Kram mit implementiert, wahrscheinlich ein paar dickere zusätzliche Tabellen notwendig werden.
Finn
-
Finnegan schrieb:
Und nebenbei, das hier sind die aktuellen Unicode-Case-Folding-Regeln:
Das ist mal ein guter link. Zeigt einem so ein bißchen was von der Komplexität des Problems.