String groß/klein schreiben
-
Du postest zu schnell :p Schau mal auf meinen Nachtrag

-
Ist eigentlich auch
char MyTolower(unsigned char c) { return tolower(c); }in Ordnung?
-
Sollte nicht gehen, da implizite Konvertierungen von char nach signed oder unsigned nicht erlaubt sind. (immer explizite cast-Syntax)
Edit: Hmm kompiliert bei mir auch, sogar mit --pedantic . Will Irrtum meinerseits mal nicht ausschließen

-
Na ja compilieren tut es im Zusammenhang mit std::transform. Aber könnte sein das es auf Compiler wo char, signed char entspricht nicht compiliert.
-
Hallo,
mal von der signed/unsigned-Problematik (die ich hier im Forum schon mindestens elftausendmal angesprochen habe) abgesehen, hat der Aufruf vontransform(s.begin(),s.end(),ostream_iterator<char>(cout),tolower);noch ein anderes Problem. tolower ist im Namensraum std mehrdeutig (abhängig von den gerade inkludierten Headern). Der letzte Template-Parameter von transform kann also nicht immer eindeutig deduziert werden.
Man sollte also stets die von 7H3 N4C3R vorgeschlagene Variante verwenden.
-
Man sollte stets eine for-schleife verwenden.

-
Da du gerade anwesend bist, Hume:

Wie sieht das jetzt aus mit der impliziten Konvertierung von char nach signed oder unsigned char? Gerade hat's bei mir kompiliert, genauso kann ich mich aber auch dran erinnern, dass mir sowas schon um die Ohren geflogen ist. Eine Sektion im Standard, die eine klare Aussage dazu trifft, konnte ich bis jetzt auch noch nicht finden.
-
Hallo,
ich sehe nichts das gegen eine implizite Konvertierung zwischen signed char und unsigned char spricht. So wie ich das sehe sind die folgenden Umwandlungen äquivalent.typedef unsigned char uchar; signed char c = ...; unsigned char d = c; unsigned char e = uchar(c); unsigned char f = static_cast<unsigned char>(c);d
Ein Tolower mit einem unsigned char Parameter sollte für alle chars ok sein (signed und unsigned).
Nur mit dem int-Parameter muss man halt aufpassen, da man hier signed chars zuerst nach unsigned casten muss. Ansonsten erhält man potentiell illegale Werte.
-
Jetzt fällt's mir auch gerade wieder ein, wo ich die Probleme hatte. char* vs. unsigned char*. Das hat ja aber mit den chars selbst nix zu tun und die Gründe sind mir auch völlig klar. Trotzdem danke

-
Bin gerade etwas verwirrt über die funktion die da gebaut wird. Was muss ich denn nun schreiben, damit ich (ohne Probleme) einen String in einen anderen umwandeln kann. Was hat das mit dem cout dort eigentlich zu suchen.
Und weil die Frage kam (in diesem Thread oder in einem anderen. weiß nicht mehr) wieso man überhaupt sowas brauch:
Ich möchte verschiedene Dateiendungen abprüfen, und habe keine Lust alle möglichen Permutationen der GroßKleinSchreibung abzuprüfen. Deshalb wird alles auf groß gemacht und fertig.

-
Siehe letzten Beitrag von 7H3 N4C3R auf Seite 1.