Problem mit einer Zeichenkette



  • Ich habe folgendes Problem.
    Ich habe ZB.eine Variable angelegt

    char wert;

    Ich will jetzt unter der Variablen "wert" ZB.30 verschiedene Werte
    speichern.
    Wie kann ich das machen ohne ZB. 30 mal die Variable "wert" , "wert1" usw. anzulegen?
    Ist es egal welche Länge die Zeichenkette hat.

    Die Eingabe soll ZB.so aussehen "45673-12"

    Und kann man die Variable in der main Funktion
    deklarieren,
    und in einer anderen Funktion einlesen.
    Das muß man dann doch irgendwie mit Pointern machen , oder?

    Wäre echt dankbar für Hilfe.



  • Nimm dafür einen vector.

    vector<string> wert(30);

    dann kannst Du wie bei Arrays auf Wert zugreifen:

    wert[0] = "bla"
    ...
    wert[29] = "bla"

    mfg
    Evil-Hunter

    PS: Ich hoffe das stimmt so, wie ichs erzähl 😃



  • Es muss vorher aber vorher im Code noch folgende Zeile ergänzt werden:

    #include <vector>
    

    Der Vorteil gegenüber einem Array ist, dass z. B. Elemente einfach eingefügt werden können:

    wert.push_back("Ende"); // Ans Ende...
    wert.insert(wert.begin()+2, "Mittendrin"); // An die 2. Stelle packen, alles danach wird verschoben...
    


  • für viel mittendrin einfügen nimmt man aber ne liste.



  • Ich muß aber Arrays verwenden.
    Kann man in char überhaupt so eine Zeichenkette wie ZB. "12435-12" speichern.

    Und es sollen ZB 30 verschiedene Zahlen sein.



  • Ich muß aber Arrays verwenden.
    Kann man in char überhaupt so eine Zeichenkette wie ZB. "12435-12" speichern.

    Und es sollen ZB 30 verschiedene Zahlen sein.



  • So müsste es gehen:

    #include <iostream>
    using namespace std;
    int main()
    {
        int AnzahlStrings = 30;
        char **wert = new char*[AnzahlStrings]; // Reserviere Speicher für 30 *chars...
    
        for(int i=0; i<AnzahlStrings; i++)
        {
            wert[i] = new char[20]; // ...mit max. 20 Zeichen...
        }
    
        wert[0]="Dies";
        wert[1]="ist";
        wert[2]="ein";
        //...
        wert[29]="Test";    
        for(int i=0; i<AnzahlStrings; i++)
        {
            delete[] wert[i]; // ... Speicher wieder freigeben, auf den die 30 Zeiger zeigen..
        }
        delete[] wert; // ... Array freigeben
    }
    

    Allerdings gibts in C++ auch ein String-Klasse. Wenn du die verwenden darfst, wirds noch ein Tacken einfacher:

    string *wert = new string[20]; // Platz für 20 StringObjekte...
    ...
    delete[] string; // ...müssen aber auch irgendwann wieder gelöscht werden...
    

Log in to reply