string mit zahlen führt zu fehlern



  • hallo!

    wenn ich einen string habe gefüllt mit chars da funktioniert rotate() aus algorithm problemlos...

    habe ich ihn allerdings mit zahlen gefüllt auf diese art hier:

    string abc;
    abc[0] = '2';
    abc[1] = '1';
    //...
    

    dann 1. funktioniert rotate() nicht
    2. ist die ausgabe mit einfach

    cout<<abc;
    

    nicht möglich. sondern man muss sowas in der art machen:

    cout<<abc[0];
    //...
    // natürlich later dann automatisch
    

    kann das wer erklären????



  • std::string abc( "321" );
    

    Oder:

    std::string abc( 3, '0' );
    
    abc[ 0 ] = '3';
    abc[ 1 ] = '2';
    abc[ 2 ] = '1';
    

    Oder:

    std::string abc;
    
    abc.resize( 3 );
    
    abc[ 0 ] = '3';
    abc[ 1 ] = '2';
    abc[ 2 ] = '1';
    


  • Der String abc ist leer (da default-konstruiert), hat also die Länge 0. Und mit den anschließenden Zuweisungen abc[0]='2'; etc schreibst du auf nicht-exisitierende String-Elemente - was dabei herauskommt, ist undefiniert (aber in jedem Fall nicht das, was du erwartest). Also entweder du füllst den String per push_back() mit den benötigten Ziffern (dann wächst er auch korrekt mit) oder du sagst ihm gleich, wie groß er werden soll.



  • ahso 😃

    ive got it.. stimmt, string is ja wie ein char-array fast, wenn ich mich nicht ganz täusche...

    kann ich vllt noch ne erklärung zu push_back() ( params, etc) haben? 😛

    danke scho ma



  • push_back hängt einen einzelnen Charakter an den String an und achtet dabei aber auch das genug Speicher reserviert ist.



  • hokage schrieb:

    ive got it.. stimmt, string is ja wie ein char-array fast, wenn ich mich nicht ganz täusche...

    Naja, nicht wirklich - oder hast du schonmal ein char-Array gesehen, das seine Größe zur Laufzeit ändern kann 😉

    kann ich vllt noch ne erklärung zu push_back() ( params, etc) haben? 😛

    Kurzfassung: push_back() erwartet nur einen char als Parameter und hängt diesen an das Ende des Strings an. Die Langfassung findest du in jedem brauchbaren C++ Lehrbuch (oder z.B. in meinem Magazinartikel "Stringverarbeitung in C++").



  • string is ja wie ein char-array fast,

    betonung lag auf FAST 😉

    so also:

    abc = push_back('1');
    

    denn hätt ichs verstanden 😃



  • Eher so:

    abc.push_back( '1' );
    


  • ok alles klah xD

    denn hab ichs.

    vielen dank nochma 😉


Anmelden zum Antworten