Hallo Stefan
Ich muss gestehen, dass ich nicht so erfahren in C++ bin.
OK
Zu meinem Problem. Ich moechte eine sehr simple
Textverschluesselung schreiben, die eine txt-Datei einliest,
und eine verschluesselte Version erzeugt.
Hier erstmal mein Code:
Das Problem wurde ja schon von Anderen hier
hinreichend bearbeitet, ich würde lediglich
anmerken wollen, daß es in solchen Fällen
nicht die günstigste Lösung ist, „zeilenweise“
zu arbeiten. Besser wäre, die Datei „byteweise“
direkt in einen std::vector zu
verwandeln, die Operationen durchzuführen und den
std::vector direkt wieder zurückzuschreiben.
Ich hab das mal in Ansätzen entworfen, vielleicht
nützt es ja noch was für das C+±Studium.
Grüße
CMБ
#include // fuer transform()
#include // stream\_iterator
#include // cout, cin
#include // ifstream, ofstream
#include // daten
#include // Dateinamen
using namespace std;
// Klasse, die ein "Funktionsobjekt fuer En/Dekodierung bereitstellt
class MyCoder {
private:
int f, i;
public: // Initialisierung mit z.B. f = 3, dann ch = ch + 3\*i
MyCoder(int wert) : f(wert), i(0) { } // oder -3, ch = ch - 3\*i
unsigned char operator() (unsigned char& c) { return c + f \* i++; }
};
// Datei zu vector
int file\_to\_vector(const string& fn, vector& data);
// vector zu Datei
int vector\_to\_file(const vector& data, const string& fn);
int main()
{
string fnEingabe, fnAusgabe;
cout \> fnEingabe;
cout \> fnAusgabe;
vector daten;
file\_to\_vector(fnEingabe, daten);
cout \> was;
if(was == 'e')
transform(daten.begin(), daten.end(), daten.begin(), MyCoder(3));
else if(was == 'd')
transform(daten.begin(), daten.end(), daten.begin(), MyCoder(-3));
vector\_to\_file(daten, fnAusgabe);
cout & data)
{
ifstream infile(fn.c\_str(), ios::binary);
infile \>\> noskipws;
copy(istream\_iterator(infile),
istream\_iterator(), back\_inserter(data));
infile.close();
return data.size();
}
// Vektor Zeichenweise in Datei verwandeln
int vector\_to\_file(const vector& data, const string& fn)
{
ofstream outfile(fn.c\_str(), ios::binary);
copy(data.begin(), data.end(), ostream\_iterator(outfile));
outfile.close();
return data.size();
}