Programm für die Schule
-
Hallo zusammen!

Ich soll für die schule ein Programm schreiben das folgendes können muss:
Aufgabenstellung
– Schreiben Sie ein einfaches Programm, das in einer Datei jedes einzelne Vorkommen eines bestimmten Zeichens durch ein anderes ersetzt.
– Der Benutzer soll die Möglichkeit haben, den Dateinamen, das zu suchende und das Ersatzzeichen einzugeben.
– Am Ende des Programms soll noch ausgegeben werden, wie viele Ersetzungen vorgenommen worden sind.
– Beispiel: Die Datei heisse GUGUS.TXT und das Programm soll alle ‚e’ durch ‚E’ ersetzen:
Vorher: „Dies ist ein einfacher Text“
Nachher: „DiEs ist Ein EinfachEr Text“Ich habe mal mit programmieren begonnen und folgendes geschrieben:
#include <cstdio>
#include <iostream>
using namespace std;int main() {
char einZeichen;
int ersatzZaehler = 0;
FILE *meinFile;cout << "Geben Sie den Filenamen ein: ";
char name[60];
cin >> name;
meinFile = fopen(name, "r+");
if (!meinFile) {
cout << "Konnte " << name << " nicht oeffnen!" << endl;
}
else {
char eingabe[20];
cout << "Welches Zeichen soll gesucht werden? ";
cin >> eingabe;
char suchZeichen = eingabe[0];cout << "Welches Zeichen soll als Ersatz verwendet werden? ";
cin >> eingabe;
char ersatzZeichen = eingabe[0]; // der Dateizeiger steht jetzt am Anfang
while ( (einZeichen = fgetc(meinFile)) != EOF) {
if (einZeichen == suchZeichen) {
fpos_t position;
fgetpos(meinFile, &position);
position--;
fsetpos(meinFile, &position);
fputc(ersatzZeichen, meinFile);
ersatzZaehler++;
}
}
cout <<endl<<"Es sind "<<ersatzZaehler<<" Zeichen ersetzt worden." << endl;
}
fclose(meinFile);
return 0;
}Leider wird das *.txt file vollkommen verunstaltet und das Programm läuft nicht durch...

Kann mir jemand helfen?
Bitte um schnellstmögliche Hilfe!

Freundliche Grüsse
Asskicker
-
also mal vorweg
if (!meinFile) { cout << "Konnte " << name << " nicht oeffnen!" << endl; return 0; }ist wesentlich eleganter als alles in nen elsezeweig du drücken. was dein prob angeht so ist das prob ganz einfach, nur warum es entsteht weis ich nicht. bei setpos springt er zürück auf die erste position. leider nie damit gearbeitet, um genau zu wissen was da abgeht und da er dann nicht das e ersetzt sondern das D, kommt er in eine endlosschleife weil er ja immerwieder das e findet. Wie gesagt kenne mich etwas wenig damit aus weil ich habe schon immer in einen extra buffer geladen und dort manipuliert (nicht schön aber sicher). so kannst auf nummer sicher gehen.
-
Hi,
Dein Posting erzeugt Augenkrebs: Bitte gib doch einen aussagekräftigen Titel und packe Deinen Quellcode in cpp-Tags.
Zum Code (so wie ICH es machen würde, es gibt 1000 Wege ... aber meiner ist der Beste
):
- Stricke das Ganze mal auf std::string und std::fstream im, das würde schon einiges vereinfachen.
- Einlesen mit istream& getline( istream& is, string& s, char delimiter = '\n' ); (NICHT istream::getline())
- Ersetzen mit string::replace()Gruß,
Simon2.