vector mit zeiger füllen.



  • Grüezi Wohl und frohe Festtage gleich mit. 😉

    Ich bin kein Studierter, sondern ein Hobby-Programmierer aus dem Bereich Python.
    Zu C++ bin ich jetzt gewechselt, weil mir persönlich Python zu "unästhetisch" war und ich zwar einfach und leicht drauflos coden kann, aber ich eig. auf fast nichts aufpassen muss und der gleichzeitige lern-effekt zu der Funktionierung der Maschine völlig ausbleibt. Bei C++ muss man schon eher schauen und lernen, was man da eig. anstellt, wen man etwas programmiert, kurz gesagt: Es ist eine höhere Herausforderung.

    Auf jedenfall lerne ich gerade mit: ISBN: 978-3-8362-1547-3.

    Jetzt wollte ich ein kleines Programm schreiben, wo man seinen namen eingeben kann und dann jeder char im namen in die vector liste name_liste gespeichert wird. Es wird eine 2. vector liste erstellt, in die nur zeiger gespeichert werden die auf eine adresse jedes char in der name_liste zeigt.

    das ist der code:

    #include <iostream>
    #include <string>
    #include <vector>
    
    using namespace std;
    
    int main(void)
    {
        string name;
    
        cout << "Ihr Name: ";
        getline(cin, name);
        cout << "Hallo " << name << ", alles fit ?" << endl;
    
        vector<char> name_liste (name.size()-1);
        vector<char*> element_zeiger (name.size()-1);
    
        for (int laenge = 0; laenge <= name.size(); laenge++)
        {
            name_liste[laenge] = name[laenge];
            element_zeiger[laenge] = &name[laenge];
        }
        cout << "\nDer Name in der Liste: " << endl;
    
        for (int x=0; x<=name.size(); x++)
        {
            cout << name[x] << " ist auf: " << element_zeiger[x] << " gespeichert." << endl;
        }
    }
    

    Das programm hat einen lustigen nebeneffekt,wie man bei der ausführung sehen kann, nur ist dies nicht der gewünschte. 😉 Im Buch komm ich so nicht wirklich weiter, so das ich hier fragen muss, wo mein fehler, oder evtl. auch denkfehler liegt. Bevor ich das nicht schaffe, gehe ich nicht all zu weiter vor im Buch. Schön schritt für schritt... 🙂 Ich hoffe das sich jemand meines problemes annehmen kann, ohne all zu viel lachen zu müssen.

    Freundlichst grüsse ich Euch.

    Grüsse

    Andi



  • Ich habs !

    #include <iostream>
    #include <string>
    #include <vector>
    
    using namespace std;
    
    int main(void)
    {
        string name;
    
        cout << "Ihr Name: ";
        getline(cin, name);
        cout << "Hallo " << name << ", alles fit ?" << endl;
    
        vector<char> name_liste (name.size()-1);
        vector<char*> element_zeiger (name.size()-1);
    
        for (int laenge = 0; laenge <= name.size(); laenge++)
        {
            name_liste[laenge] = name[laenge];
            element_zeiger[laenge] = &name[laenge];
        }
        cout << "\nDer Name in der Liste: " << endl;
    
        for (int x=0; x<=name.size(); x++)
        {
            cout << name[x] << " ist auf: " << &element_zeiger[x] << " gespeichert." << endl;
        }
    }
    

    trotzdem stimmt da was nicht... glaub ich.



  • Der Fehler kommt daher, dass du dich nicht an eine "Konvention" hälst.
    normalerweise sehen schleifen über arrays in C++ nicht so aus

    for(int i=0; i<=size-1; ++i)
    

    sondern so

    for(int i=0; i<size; ++i)
    

    Am besten bemerkst du deinen Fehler, wenn du das mal an einem Beipsiel durchgehst.
    Name = "abc"
    Name.size() = 3
    Aber die vectoren, die die Buchstaben/zeiger halten haben jetzt nur platz für 3-1 = 2 Einträge.
    Zusätzlich greifst du in deiner Schleife auf das Element name.size() zu, da "länge" bis <= name.size() läuft. Ein Array mit 3 Einträgen ("abc") hat die indizes "0,1,2" und nicht 3. Kannst es ja mal versuchen umzuschreiben.
    Als kleine Randnotitz: Es ist sehr unüblich, vectoren aus zeigern zu erstellen, aber hier ist es ja nur eine Übung....



  • ahhh ich wieder...

    vielen lieben dank @ asdfasd, umgeschrieben, sieht schon viel besser aus.

    und auch deine randnotiz ist notiert und klebt am bildschirm. 🙂

    und ja, ist nur eine übung. :xmas1:

    grüsse



  • ftfy

    #include <vector>
    #include <string>
    #include <iostream> 
    
    int main()
    {
        std::string name;
    
        std::cout << "Ihr Name: ";
        std::getline( std::cin, name);
    
    	std::cout << "Hallo " << name << ", alles fit?\n\n";
    
        std::vector< char * > element_zeiger( name.length() );
    
        for( std::string::size_type i = 0; i < name.length(); ++i ) {
    
    		element_zeiger[ i ] = &name[ i ];
        }
    
        for( std::string::size_type i = 0; i < name.length(); ++i )
        {
            std::cout << '\'' << name[ i ] << "\' ist an Adresse " << static_cast< void const * > ( element_zeiger[ i ] ) << " gespeichert.\n";
        }
    }
    


  • Kerze schrieb:

    Auf jedenfall lerne ich gerade mit: ISBN: 978-3-8362-1547-3.

    Das Buch ist zwar sehr günstig, aber nicht besonders gut.
    Gute Bücher wären z.B. der Primer oder "Der C++ Programmierer".

    http://www.amazon.de/exec/obidos/ASIN/382732274X/marcbackccecke
    http://www.amazon.de/exec/obidos/ASIN/3446416447/marcbackccecke


Anmelden zum Antworten