char felder in ein char feld



  • Hallo zusammen,
    ich möchte gerne mehrere char felder in ein char feld speichern.
    Also in etwa so.

    char feld[100];
    char a[3],b[4],c[4],d[9]...

    also die Felder a,b,c,d in das feld[100] speichern.

    Wie ist sowas möglich...

    Vielen Dank für eure Antworten.


  • Mod

    http://www.cplusplus.com/reference/algorithm/copy/
    Und der Rest ist ein bisschen Bastelarbeit.



  • klingt ziemlich kompliziert, gibt es nichts einfacheres dazu?


  • Mod

    bordon schrieb:

    klingt ziemlich kompliziert, gibt es nichts einfacheres dazu?

    😮 Kompliziert? Lass dich nicht von der Templatedefinition abschrecken. Einfacher wird's kaum gehen.
    Ich erkläre mal auf Deutsch:

    copy(erstes_element, element_hinter_letztem_element, wohin_kopiert_werden_soll);
    

    Damit kannst du zum Beispiel das hier machen:

    char feld[100];
    char a[3],b[4];
    
    copy(a, a+3, feld);  // von a bis a+3 nach feld kopieren. feld[0] ist dann a[0], feld[1] ist a[1] und feld[2] ist a[2]
    copy(b, b+4, feld + 3) // feld[3] ist dann b[0], feld[4] ist b[1], usw.
    

    Wie du das dann hinbekommst, immer an die richtige Stelle zu kopieren, überlasse ich dir.

    Du kannst natürlich alles von Hand über Schleifen kopieren, wenn dir das lieber ist... 🙄

    Oder du könntest auch einen leeren String erstellen und immer mittels append anhängen. Das wäre eine sehr einfache Möglichkeit, alle kleinen Felder zusammenzukleben. Und hinterher kopierst du das Ergebnis nach feld.



  • Vielleicht könntest du das auch mit einer union machen. Dann hast du nur ein Feld und die Änderungen, die du an den einzelnen Feldern a,b,c,... machst, wirken sich dann auch gleich auf das große Feld aus.

    MfG, Jochen



  • bordon schrieb:

    Hallo zusammen,
    ich möchte gerne mehrere char felder in ein char feld speichern.
    Also in etwa so.

    char feld[100];
    char a[3],b[4],c[4],d[9]...

    also die Felder a,b,c,d in das feld[100] speichern.

    Du kannst aus a,b,c,d Zeiger machen, die irgendwo in das feld zeigen.

    int main()
    {
      const int buffsize = 100;
      char buffer[buffsize];
      char* a = buffer+0;
      char* b = buffer+3;
      char* c = buffer+3+4;
      char* d = buffer+3+4+4;
    }
    

    Die Gefahr ist allerdings, dass Du versehentlich zB über den Zeiger a das überschreiben kannst, worauf auch b zeigt:

    a[3] = 'X'; // verändert das erste Zeichen, auf das b zeigt.
    


  • ** vector<vector<char*>> foo; **

    Dann hast du eine Liste an Listen von char*-pointern.
    Element hinzufügen: push_back (element ) function
    Zugriff: operator[] (also zB foo[2][5] )


Anmelden zum Antworten