Wörter von Textdatei einlesen und verändern mit Arrays
-
HalliHallo
Ich muss in der Schule ein Programm (c++) schreiben, welches eine vorgegebene Datei einliest.
Bsp. mit dem Inhalt "Das ist ein Satz"
Das Programm ändert dann den Satz bzw. jeden einzelnen Buchstaben durch einen anderen (a-z, b-y usw.)
Wir haben das ganze schon mit einzelnen Buchstaben gemacht, nun aber mit Wörtern.
#include <iostream> #include <fstream> #include <time.h> #include <windows.h> #include "ls.h" using namespace std; ifstream datUrsprung("H:\\Ursprung.txt", ios::in); ofstream datZiel("H:\\Ziel.txt", ios::out); int main() { LesenDatei(); return 0; } void LesenDatei() { int iPos = 0; // Buchstabenposition char cZeichen; while (datUrsprung.good()) // Liest Zeile bis zum Ende (EOF) { datUrsprung.seekg(iPos); // Buchstabenposition im Text cZeichen = (char)datUrsprung.get(); if (datUrsprung.good()) SchreibenDatei(cZeichen); iPos ++; // Buchstabenposition um 1 erhöht } } char Ersetze(char cVon) { if(((int)cVon) > 96 && ((int)cVon < 123)) //kleinbuchstaben? { return char(122 - ((int)cVon - 97)); } if(((int)cVon) > 64 && ((int)cVon < 91))//grossbuchstaben? { return char(90 - ((int)cVon - 65)); } if(((int)cVon) > 47 && ((int)cVon < 58)) //zahl? { return char(57 - ((int)cVon - 48)); } else { return cVon; } } void SchreibenDatei(char cZeichen) //Schreiben und Ausgabe { cout << Ersetze(cZeichen); datZiel << Ersetze(cZeichen); }WICHTIG: Es muss mit Arrays sein (also kein string gebrauchen)
gruss
Eldeon
-
Hallo,
Habt ihr dieses Programm in der Schule geschrieben? Und sollt dieses nun so modifizieren, dass es Wortweise einließt? Wenn ja: Was hast du bisher versucht? Woran hängst du?Außerdem:
- Warum windows.h?
- Warum time.h?
- Warum ls.h?
- Warum verwendest du nicht std::isalpha() etc :)?
Btw: Das Einlesen von Wörtern (unterschiedlicher Länge) ist - mit rohen char-Arrarys - kein Spaß...
Caipi
-
Hu
ja wir haben dieses Programm in der Schule geschrieben, btw. einen Teil davon.
Windows.h und time.h hab ich hingeschrieben, weil ich was versucht habe. Habs vergessen wieder zu löschen

Das "ls.h" ruft die verschiedenen Funktionen auf.
Der Lehrer will es in Arrays sehen, die Lösung haben wir schon mit strings gemacht, aber naja ...

Mein Problem is, dass ich nich weiss, wie das Programm merkt, wann es ein Wort ist und dieses dann einliest, bzw. wie du schon sagstest, wieviele Buchstaben das Wort hat.
Wenn das Programm es erstmal checkt, wann es ein Wort ist, dann hab ich n grossen Schritt gemacht (hoff ich mal), aber naja, hab bisher noch keine ordentliche Lösungsmöglichkeit gefunden.
was is denn std::isalpha() etc. ? Hatten wir noch nie, und werden wir warscheinlich auch nie haben...
Gruss Eldeon
-
Mal die C Funktionen:
isalnum() pruft auf alphanumerische Zeichen, es ist aquivalent zu (isalpha(c) || isdigit(c)). isalpha() pruft auf Buchstaben, in der standard "C" Spracherweiterung ist es aquivalent zu (isupper(c) || islower(c)). In anderen Spracherweiterungen konnen weitere Zeichen sein, fur die isalpha() wahr ist - Zeichen, die weder GroB- noch Kleinbuchstaben sind. iscntrl() pruft auf Kontrollzeichen. isdigit() pruft auf Ziffern ab. isgraph() pruft auf druckbare Zeichen auBer Leerzeichen ab. islower() pruft, ob c ein Kleinbuchstabe ist. isprint() pruft auf druckbare Zeichen inklusive Leerzeichen ab. ispunct() pruft auf druckbare Zeichen, das kein Leerzeichen und kein alphanumerisches Zeichen ist. isspace() pruft auf Freizeichen. In den "C" and "POSIX" Spracherweiterung sind dies: Leerzeichen, Seitenvorschub ('\f'), Zeilenumbruch ('\n'), Carriage Return ('\r'), Horizontaler Tabulator ('\t'), und verticaler Tabulator ('\v'). isupper() pruft auf GroBbuchstaben ab. isxdigit() pruft, ob c eine hexadezimales Ziffer ist, also eine von 0 1 2 3 4 5 6 7 8 9 0 a b c d e f A B C D E F.In C++ ist das im std-namespace.
Was du machst ist einfach so lange einzulesen, wie ein Buchstabe kommt.
char* LesenDatei() { int iPos = 0; // Buchstabenposition char cZeichen; char Wort[100]; //Denk mal kein Wort ist länger als 100 Zeichen int wPos = 0; //Position des Zeichen im Wort while (datUrsprung.good()) // Liest Zeile bis zum Ende (EOF) { datUrsprung.seekg(iPos); // Buchstabenposition im Text cZeichen = (char)datUrsprung.get(); if (isalpha(cZeichen)) { //Test ob es ein Buchstabe ist wort[wPos] = cZeichen; wPos++; } else { wort[wPos] = '\0'; // Daran erkennt man das Ende des Wortes if (datUrsprung.good()) SchreibenDatei(Wort); wPos = 0; } iPos ++; // Buchstabenposition um 1 erhöht } }Musst natürlich noch deine SchreibenDatei() ändern.