probs mit arrays C++ 

  • Ersteller Ersteller Br4!n
  • Erstellt am Erstellt am
Status
Für weitere Antworten geschlossen.
B

Br4!n

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"


Code:
#include 
#include 
#include 

using namespace std;

FILE *Datei1;
char Einlesepuffer[2];
char zeichen;
int Zeichenanzahl = 0;
string *pallezeichen = 0;



int main() {


ifstream datei;
string dateiname = "C:\\text.txt";


Datei1 = fopen("c:\\text.txt","r");

while(feof(Datei1) == 0)
{ 
fgets(Einlesepuffer,2,Datei1);
cout  Zeichenanzahl++;
}

fclose(Datei1);
Zeichenanzahl--;
cout 


pallezeichen = new string[Zeichenanzahl];


Zeichenanzahl--;




datei.open(dateiname.c_str(), ios_base::in);


ofstream neuedatei;
string neuer_dateiname = "C:\\neuertext.txt";

neuedatei.open(neuer_dateiname.c_str(), ios_base::out);

for(int i=0; i {
if(!datei.eof())
{
datei.get(zeichen);
pallezeichen[i] = zeichen;
}
}

datei.close();


neuedatei  

neuedatei.close();

delete[] pallezeichen;

return 0;
}
 
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

Code:
Zeichensammlung[i] = zeichen;

i ist die poszion des zeichen oder die anzahl der ausgelesenn Zeichen
 
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
 
ich habe oben jetzt den aktuellen code eingefügt.
allezeichen.size(Zeichenanzahl) scheint so nicht zu gehen...
vllt muss ich es doch über den heap machen
 
mit
Code:
#include
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:
Code:
string *pallezeichen = 0;

/* und später im Programm */

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....
 
nehme ich für "pallezeichen" "char" als typ, wird der text an sich schonmal in die datei reingeschrieben. jedoch folgt am ende noch "ÍýýýýÝÝÝ"
 
Status
Für weitere Antworten geschlossen.

Ähnliche Themen

Zurück
Oben Unten