char text[20] <--> string text



  • habe noch mal ne grundsätzliche frage zu strings:

    man kann ja, um texte zu speichern, char-felder anlegen, z.b cahr text[20].
    man kann aber auch, sofern die string-header eingebunden ist, das ganze auch so machen: string text

    wegen delphi bin ich letzteres gewöhnt und sehe jetzt grade nicht die vorteile der ersten variante, außer vllt speichervorteile, was man aber heutzutage, glaub ich, eher vernachlässigen kann.
    mit der string-variante kann man z.b. auch, mir auch aus delphi bekannt, strings zu einem zusammenschließen (text3=text1+text2), was mit dem char-feld nicht (zumindest nicht so) geht.

    könntet ihr mir vllt so eine kleine pro<->contra liste erstellen??? *dreist-fühl 😞 *

    thx so far, Mr. Pink



  • Die kontra-liste bei std::string dürfte recht klein ausfallen. Benutz es einfach. 🙂

    Die andere Variante ist die aus C. In C++ hat man halt ne nette Klasse außenrum gebaut und die Operatoren überladen. Sieht netter aus, ist in mancher Hinsicht etwas sicherer zu benutzen (abschließendes \0 etc) und ist in 99,9% aller Fälle genauso schnell wie die andere Variante.



  • mir ist beim ausprobieren eben aufgefallen, dass

    cin.getline(text,20);
    

    nicht funktioniert, wenn text ein string ist.
    wie lese ich denn ALLES geschriebene ein, wenn einen string habe?

    aber danke erstmal für die schnelle antwort



  • Mit getline(cin, text) geht das.



  • Kann man also sagen, dass char relativ nutzlos ist, da es ja auch string gibt?



  • char ist nicht nutzlos, char* kannst du aber tatsächlich meist durch string ersetzen.



  • was ist denn char*? 😕 `
    char ist mir klar, aber das sternchen kann ich nicht einordnen, und der index meines c++-buches auch nicht...



  • Schau mal in das Kapitel über Zeiger.



  • Schlag im Buch mal unter Zeiger nach.



  • mit der string-variante kann man z.b. auch, mir auch aus delphi bekannt, strings zu einem zusammenschließen (text3=text1+text2), was mit dem char-feld nicht (zumindest nicht so) geht.

    könntet ihr mir vllt so eine kleine pro<->contra liste erstellen

    Naja so einfach kann man es nich beantworten .. weil:
    Es einfach aepfel und birnen sind ... aber beides Obst ^^

    std::string eignet sich hervorragend, um ein
    char * dynText = new char [128]; //
    zu ersetzen ...

    waehrend nen
    char staticText [128];
    nen ungemein performanten charm gegenueber der dynamischen variante hat ^^

    Arbeitest du mit dateien und C++, insbesondere streams zusammen, und ist das allokieren des speichers kein performancetechnisches problem, soweiso anfuegen und loeschen draus willst, sollte std::string deine Wahl sein.

    Musst du aber C-funktionen einer fremden lib mit char buffer befuellen,
    oder du rufst oft und viel eine funktion auf die nen buffer / string lokal allokieren muss und wieder verwerfen muss, das ganze zeitkritisch auch nochist, dann ist eher das "char staticText [128];" mittel der Wahl.

    Ciao ...



  • Jester schrieb:

    Die andere Variante ist die aus C. In C++ hat man halt ne nette Klasse außenrum gebaut und die Operatoren überladen. Sieht netter aus, ist in mancher Hinsicht etwas sicherer zu benutzen (abschließendes \0 etc) und ist in 99,9% aller Fälle genauso schnell wie die andere Variante.

    ich würde sagen es ist langsamer aber weil die computer so schnell sind isses egal.


Anmelden zum Antworten