Funktion um Kleinbuchstaben in Strings in Großbuchstaben umzuwandeln



  • Einen String von Klein- in Großbuchstaben umzuwandeln ist ein Einzeiler:

    string str = "haLLo WeLt";
    
    transform( str.begin(), str.end(), str.begin(), toupper );
    


  • Stromberg schrieb:

    Hm dann stellt sich mir Frage 1: Wieviele Compiler gibt es eigentlich????

    Viele? 😃 Alleine für Windows gibts: ICC, MSVC, GCC/MinGW, TurboC++, Portland Group Tools und OpenWatcom. Für andere Systeme, z.B. Großrechner usw. gibts entsprechend auch welche. Z.B. hat IBM seinen XL C/C++. Sun hat seine Sun Studio für Solaris...

    Stromberg schrieb:

    Und dann stellt sich mir noch 2: Ich hab schon öfters was von einer ISO\ANSI Norm der Compiler gehört. Aber das kann doch dann bitte nichts mehr mit einer Norm zu tun haben wenn ein int auf einem 32bit system ein byte groß ist. Oder??? Okay ich würde es verstehen wenn auf einem ganz alten Pc der Compiler die Typen einfach automatisch anpasst und somit alle ein Byte z.B. haben.....!

    Also der Standard (ISO) beschreibt nur die Sprache und die Bibliothek. Teilweise findet man im Standard solche Sachen wie "Das Verhalten von diesem C++ Merkmal ist undefiniert." So in etwa. D.h. dem Compiler- und Library-Hersteller ist es freigestellt, was daraus wird. Dann gibts wieder Sachen, die genaues Verhalten vorschreiben. Z.B. wie eine for-Schleife zu funktionieren hat. Das ist die ISO-C++ Norm. Es ist nur ein Dokument. Und jeder der einen C++ Compiler oder C++ Standard-Library entwickeln will, kann sich danach richten. (muß nicht) Die meisten bekannten Compiler halten sich mittlerweile zu (ich schätze mal) 99% an den C++ Standard. Andere halten sich sehr schlecht dran, wie z.B. der DMC oder OpenWatcom. Und wenn im C++ Standard nicht drin steht, das int 32 Bit sein muß, ist es letztendlich nicht garantiert.

    Ansonst kann ich dir diesen Artikel empfehlen:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-159236.html 😉



  • camper schrieb:

    ...

    camper, du bist in diesem board definitiv 'the king of c++' 🙂
    :xmas2:



  • Um mal wieder auf den Ursprung zurückzukommen:

    Stromberg schrieb:

    1. Warum ist der Parameter eine konstante Referenz? Das würde doch auch mit einer nich konstanten gehen, sodass man einfach gleich alles mit der Referenz macht und man müsste somit doch auch keine Hilfsvariable "string s" einführen und bräuchte auch kein return mehr???

    An eine const-Referenz kann man auch String-Literale oder (echt) konstante Strings übergeben, an eine normale Referenz nur bestehende String-Variablen - von daher finde ich diese Variante besser (allerdings ist es imho ein Fehler, daß die Funktion anschließend den konstanten String ändern will).

    2. Was ist size_t?? Es schaut so aus als wäre das ein Datentyp? Aber was es genau ist weiß ich nicht, kann mir das jemand erklären?

    size_t ist groß genug, um alle theoretisch möglichen Typ-Größen entgegenzunehmen - und ist im C Standard definiert (size() liefert eigentlich einen std::string::size_type - aber das ist typischerweise ein typedef für size_t).

    4. Was soll genau das string::iterator??? Das blick ich ja mal gar nicht. Ist das auch ein Typ?? schaut so aus aber so genau weiß ich das nicht. Dass bitte auch unbedingt erklären, und dann noch was die Funktion begin() genau bewirkt.

    Ein Iterator ist eine Art Smart-Pointer, der die Struktur des unterliegenden Containers besser kennt und sich ansonsten wie ein normaler Zeiger verhält (du kannst ihn inkrementieren, dereferenzieren etc - und string::iterator ist häufig sogar ein normaler Zeiger ;))


Anmelden zum Antworten