Variable vom Typ string in einer Schleife erstellen



  • Hallo,

    ich hätte mal eine Frage zu einem Problem, bei dem ich gerade auf dem Schlauch stehe. Ich würde gerne in einer Schleife bei jedem Schleifendurchlauf eine neue Variable vom Typ string erzeugen. Ihr Name soll sich dabei (natürlich) an den Schleifendurchlauf anlehnen.
    Ich stelle mir prinzipiell sowas vor:
    for(int i=1;i<=durchlauf_max;i++)
    {
    string a+i; //Erzeugen der Variablen a1, a2, a3, ...
    //weitere Anweisungen
    }

    Momentan fehlt mir hier ehrlich gesagt die Idee, wie ich das genau machen sollte. Kann mir hier vielleicht jemand weiterhelfen?

    Vielen Dank dafür!

    Viele Grüße
    Miso



  • #include <vector>
    using namespace std;
    

    [...]

    vector<string> strings(durchlaufMax);
    for(int i = 0; i < durchlaufMax; i++)
    {
      strings[i] = "bla";
    }
    

    mfg, René~



  • Hallo Miso,

    ich glaube Du brauchst so etwas:

    #include <iostream>
    #include <iomanip> // std::setfill, std::setw
    #include <sstream> // std::ostringstream
    #include <string>
    
    std::string to_string( int i )
    {
        std::ostringstream buf;
        buf << i; // oder: buf << std::setfill('0') << std::setw(3) << i;
        return buf.str();
    }
    
    int main()
    {
        using namespace std;
        int durchlauf_max = 23;
        for( int i=1; i<=durchlauf_max; ++i )
        {
            string s = "a" + to_string( i ); //Erzeugen der Variablen a1, a2, a3, ...
            //weitere Anweisungen
        } 
    }
    


  • std::vector<std::string> strings();
    strings.reserve(durchlaufMax);
    for(int i = 0; i < durchlaufMax; i++) {
      std::ostringstream s;
      s << "a" << i;
      strings.push_back(s.str());
    }
    

    Funktioniert gleich, ist nur etwas schneller und kürzzzer.



  • Hallo NewSoftzzz,

    vielen Dank für die Antwort. Ehrlich gesagt kann ich damit aber noch nicht wirklich was anfangen. Vielleicht hilft es, wenn ich noch ein wenig mehr von meinem eigentlichen Zweck beschreibe.
    Ziel ist es eine Kontenliste zu erstellen. Dies habe ich folgendermaßen gelöst:
    struct Kontenliste {
    int Kontonummer;
    int BLZ;
    char BankName[30];
    };

    Insgesamt soll die Kontenliste fünfmal aufgerufen werden, wobei ich dann gern in Konto1 alle Angaben zum 1. Konto angeben bzw. gespeichert haben möchte etc.

    Daher war meine Idee die for-Schleife (mit durchlauf_max=5), auch wenn es vielleicht ohne diese Schleife erheblich einfacher wäre. Ich möchte dies einfach gern so üben.

    Also sowas in der Art:

    for(int i=0; i<5;i++)
    {
    Kontenliste a+i; Definition der Kontenliste a1 wäre super
    a+i.Kontonummer=123456;
    ...
    i++; //um das nächste Konto erreichen zu können
    ...
    }

    Es soll also mit dieser Schleife ermöglicht werden, dass alle fünf Konten parallel vorliegen und später einfach aufgerufen werden können.

    Vielleicht kannst Du mir hier ja noch einen Rat geben, ob das so geht bzw. wie man es vielleicht besser oder einfacher gestalten könnte. Vielen Dank dafür!!

    Viele Grüße
    Miso



  • Erstmal das i++ in der Schleife brauchst du nicht, da es durch die for Schleife schon abgedeckt ist. Dann bitte keine char Arrays sondern einen C++ string benutzen. Und statt struct kann man auch direkt ne Klasse benutzen. Außerdem Variablen und Attribute mit Kleinbuchstaben beginnen und CamelCase Notation verwenden. Außerdem ist es gut wenn die ganzen Namen auf englisch hält.

    #include <vector>
    #include <string>
    using namespace std;
    

    [...]

    class BankAccount {
      int accountNumber;
      int routingCode;
      string bankName;
    };
    
    vector<BankAccount> accounts(5);
    
    for(int i = 0; i < 5; i++)
    {
      accounts[i].accountNumber = 123456;
      accounts[i].routingCode = 35050000;
      accounts[i].bankName = "Sparkasse Duisburg";
    }
    

    PS: Du weißt hoffentlich wie ein Array funktioniert, oder? Ein vector funktioniert ähnlich wie ein Array, kann aber dynamisch vergrößert werden und hat noch viele weitere tolle Sachen.

    mfg, René~



  • Hallo,

    vielen Dank für Eure/Ihre Antworten!! Genau sowas in der Art habe ich gesucht! Und vor allem bin ich jetzt wieder viel weiter (vielleicht hat man es ja gemerkt, dass ich noch Anfänger in der Programmierung bin :-)).

    Also, noch einen scbönen Abend und noch einmal herzlichen Dank!!

    Viele Grüße
    Miso



  • Werner_logoff schrieb:

    ich glaube Du brauchst so etwas: ..

    Nee - Du brauchst:

    #include <vector>
    #include <string>
    #include <iostream>
    
    struct Konto
    {
        int Kontonummer;
        int BLZ;
        std::string Bankname; // in C++ keine char[] für Strings benutzen
    };
    
    int main()
    {
        using namespace std;
        vector< Konto > kontenliste;
        for( int i=0; i<5; ++i )
        {
            Konto a_i;
            // mache was mit 'a_i;
            kontenliste.push_back( a_i ); // a_i als i'test Konto merken
        }
        // Zugriff Beispiel
        cout << "Kontonummer des 2.Kontos ist " << kontenliste[1].Kontonummer << endl;
        return 0;
    }
    

    .. oder?



  • Werner_logoff schrieb:

    Konto a_i;
    

    "a_i", ernsthaft? Der glaubt nachher noch, man könnte Variablennamen dynamisch bestimmen, du hättest das i nicht in den Namen packen sollen aus didaktischen Gründen. Besser wäre "Konto konto;" gewesen.

    mfg, René~



  • Da war ich selbst eben scheinbar ein wenig schnell.

    Ich habe das jetzt auf die Art von Herrn Logoff bei mir eingebaut! Das hat schon mal bestens funktioniert. Dabei berücksichtige ich natürlich auch die anderen Hinweise zu den Variablennamen etc.. Auf jeden Fall hat mir das wirklich sehr weitergeholfen!

    Vielen Dank!

    Noch einmal einen schönen Abend!

    Miso



  • Herrn Logoff

    ROFL 🙂



  • Miso schrieb:

    ... Herrn Logoff ...

    🙂



  • naja, der Bruder von Powe-Ronoff halt. 😉


Log in to reply