Probleme mit toupper
-
Hallo!
Wie kann ich, wenn ich einen String namens s1 habe, alle Buchstaben zu Großbuchstaben machen? Beispiel
string s1("das ist jetzt ein test");
zu
s2("DAS IST JETZT EIN TEST")
Ich habs schon mit s2 = toupper(s1) gemacht, doch das gefällt dem Compiler überhaupt nicht, sprich er gibt eine Fehlermeldung aus.
Wie könnte man das sonst noch machen?
-
Hallo,
Zeichenweise toupper anwenden. toupper erwartet einen integer als parameter.
for(int i=0;i<str.length();i++) str[i]=toupper(str[i]);
-
Was auch geht ist:
struct ToUpper{ void operator()( char &c){c=toupper(c);} }; std::string s="das ist ein test"; std::for_each(s.begin(),s.end(),ToUpper());
Aber das erste reicht wohl völlig denk ich.
-
Hi prolog!
Vielen Dank, das funktioniert!
BTW, das erste ist besser - das verstehe ich wenigstens
-
Hallo,
beide Codebeispiele sind nicht ganz korrekt. toupper erwartet einen int. Gültige Werte sind EOF und alle als *unsigned* char repräsentierbaren Zeichen.Korrekterweise musst du also auf Platformen für die char == signed char gilt, das Argument für tolower zuvor nach unsigned char casten.
Und wenn du std::transform statt for_each verwendest, brauchst du auch keine Referenz übergeben.