probs mit arrays

  • C++

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • probs mit arrays

    ich habe folgendes programm geschrieben, das eine textdatei in einen array mit der exakten größe derselben ablegen soll und den inhalt anschließend in eine neue textdatei ablegt.
    jedoch habe ich da 2 probleme:
    1. der compiler erwartet bei der array-erstellung einen konstanten wert
    2. bei der zuweisung "+=" erwartet der compiler einen "L-wert"


    C-Quellcode

    1. #include <iostream>
    2. #include <fstream>
    3. #include <stdio.h>
    4. using namespace std;
    5. FILE *Datei1;
    6. char Einlesepuffer[2];
    7. char zeichen;
    8. int Zeichenanzahl = 0;
    9. string *pallezeichen = 0;
    10. int main() {
    11. ifstream datei;
    12. string dateiname = "C:\\text.txt";
    13. Datei1 = fopen("c:\\text.txt","r");
    14. while(feof(Datei1) == 0)
    15. {
    16. fgets(Einlesepuffer,2,Datei1);
    17. cout << Einlesepuffer;
    18. Zeichenanzahl++;
    19. }
    20. fclose(Datei1);
    21. Zeichenanzahl--;
    22. cout << "\n" << Zeichenanzahl << "\n";
    23. pallezeichen = new string[Zeichenanzahl];
    24. Zeichenanzahl--;
    25. datei.open(dateiname.c_str(), ios_base::in);
    26. ofstream neuedatei;
    27. string neuer_dateiname = "C:\\neuertext.txt";
    28. neuedatei.open(neuer_dateiname.c_str(), ios_base::out);
    29. for(int i=0; i<Zeichenanzahl; i++)
    30. {
    31. if(!datei.eof())
    32. {
    33. datei.get(zeichen);
    34. pallezeichen[i] = zeichen;
    35. }
    36. }
    37. datei.close();
    38. neuedatei << pallezeichen;
    39. neuedatei.close();
    40. delete[] pallezeichen;
    41. return 0;
    42. }
    Alles anzeigen
  • zu 1.
    das läßt sich auch nicht umgehen, leider kann ein array nicht zur laufzeit wachsen...
    Auswege könnten
    -string
    -new und delete (dynamischer Speicher)
    -verkettete Liste
    sein

    zu 2.
    zu einem char läßt leider nicht so einfach was dazuaddieren, unter anderem weil ja die längen bekannt sein müssen, mit strings geht das

    Quellcode

    1. Zeichensammlung[i] = zeichen;


    i ist die poszion des zeichen oder die anzahl der ausgelesenn Zeichen
    [SIZE=1]
    Was ist der Unterschied zwischen einem U-Boot und MS Windows?
    Keiner, sobald man ein Fenster aufmacht, fangen die Probleme an
    Alle Tips von mir ohne Gewähr und auf eigenes Risiko !!
    UP1 UP2 UP3[/SIZE][SIZE=1]
    [/SIZE]
  • so, ich habe es mit strings versucht und das klappt genausowenig wie arrays.
    einziger fortschritt: wenn ich konstante größen vorgegeben habe, konnte er was einlesen, jedoch hat er irgendwas komisches dann in die erstellte textdatei geschrieben.
    wie es scheint muss man es mit zeigern machen....
  • auch strings mußt du eine größe zuweisen, das kann aber zur laufzeit pasieren mit:

    string test;
    test.size(i);

    schon passen in den string i char zeichen...

    zugrif geht auch über test liefert oder schreibt das zeichen an der Stelle i
    [SIZE=1]
    Was ist der Unterschied zwischen einem U-Boot und MS Windows?
    Keiner, sobald man ein Fenster aufmacht, fangen die Probleme an
    Alle Tips von mir ohne Gewähr und auf eigenes Risiko !!
    UP1 UP2 UP3[/SIZE][SIZE=1]
    [/SIZE]
  • mit

    Quellcode

    1. #include <string>

    scheint es nicht zu gehen, aber ich habe jetzt herausgefunden, wie man mit Zeigern einen array zur laufzeit mit unbekannter größe erstellen kann:

    um nichtkonstanten verwenden zu können muss man speicher auf dem heap reservieren und zwar mit
    "new"
    zB:

    Quellcode

    1. string *pallezeichen = 0;
    2. /* und später im Programm */
    3. pallezeichen = new string[Zeichenanzahl];


    das einzige Problem was noch steht ist, dass das programm nicht den inhalt des arrays in die neu datei ablegt, sondern die speicheradresse

    EDIT: habe den aktuellen code oben reingepostet

    PS: DOcean, hast du vllt ein beispielprogramm für die verwendung von "name.size(anzahl)" ?
  • upps ist puffer.resize nicht size

    size gibt die größe zurück

    resize ändert die größe

    tschuldigung....
    [SIZE=1]
    Was ist der Unterschied zwischen einem U-Boot und MS Windows?
    Keiner, sobald man ein Fenster aufmacht, fangen die Probleme an
    Alle Tips von mir ohne Gewähr und auf eigenes Risiko !!
    UP1 UP2 UP3[/SIZE][SIZE=1]
    [/SIZE]