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.


Anmelden zum Antworten