Hi,
folgendes Problem: Es geht um ein C++-Programm, welches eine Datei auslesen und jedes Wort einzeln mit seiner Länge als Schlüssel im Cäsarchiffre verschlüsseln soll.
Um das zu realisieren habe ich eine Klasse definiert, die als Variablen einmal den zu ver- oder entschlüsselnden String selbst (phrase) sowie die Länge des Strings (length) besitzt.
Die Methoden sind die Folgenden:
getstring() - Gibt den aktuellen String zurück
setstring(string newphrase) - Setzt einen neuen String, berechnet dessen Länge und schreibt diese in length
encode() - Kodiert den aktuell in phrase abgespeicherten String
decode() - Dekodiert den aktuell in phrase abgespeicherten String
Wenn ich das ganze jetzt allerdings kompiliere und ausführen will, so wird mir als Fehlermeldung folgendes angezeigt:
"Anweisung in 0x00430fe6 verweist auf Speicher in 0x0000006f. Anweisung "read" kann nicht auf dem Speicher durchgeführt werden"
Wo liegt mein Fehler? Ich habe das Problem schon so weit eingekreist, dass es irgendwo in word.encode() liegt. Wird diese Zeile auskommentiert, so tritt der Fehler nicht auf (das Programm macht allerdings auch nichts sinnvolles mehr).
Hier noch die beiden Dateien:
main.cpp
words.h
EDIT: For-Schleifen korrigiert
folgendes Problem: Es geht um ein C++-Programm, welches eine Datei auslesen und jedes Wort einzeln mit seiner Länge als Schlüssel im Cäsarchiffre verschlüsseln soll.
Um das zu realisieren habe ich eine Klasse definiert, die als Variablen einmal den zu ver- oder entschlüsselnden String selbst (phrase) sowie die Länge des Strings (length) besitzt.
Die Methoden sind die Folgenden:
getstring() - Gibt den aktuellen String zurück
setstring(string newphrase) - Setzt einen neuen String, berechnet dessen Länge und schreibt diese in length
encode() - Kodiert den aktuell in phrase abgespeicherten String
decode() - Dekodiert den aktuell in phrase abgespeicherten String
Wenn ich das ganze jetzt allerdings kompiliere und ausführen will, so wird mir als Fehlermeldung folgendes angezeigt:
"Anweisung in 0x00430fe6 verweist auf Speicher in 0x0000006f. Anweisung "read" kann nicht auf dem Speicher durchgeführt werden"
Wo liegt mein Fehler? Ich habe das Problem schon so weit eingekreist, dass es irgendwo in word.encode() liegt. Wird diese Zeile auskommentiert, so tritt der Fehler nicht auf (das Programm macht allerdings auch nichts sinnvolles mehr).
Hier noch die beiden Dateien:
main.cpp
Code:
#include <cstdlib>
#include <iostream>
#include "words.h"
#include <string>
using namespace std;
int main(int argc, char *argv[])
{
word bla;
bla.setphrase("hallo");
bla.encode();
cout<<bla.getphrase()<<endl;
cin.get();
return 0;
}
words.h
Code:
#include <string>
using namespace std;
class word
{
private:
string phrase;
int length;
public:
void setphrase(string newphrase)
{
phrase = newphrase;
length = (int)phrase.length();
}
string getphrase()
{
return phrase;
}
void encode()
{
int ASCII[255];
int newASCII;
for (int recentLetter=1; recentLetter<=length; recentLetter++)
{
// Array mit ASCII-Werten der Zeichen füllen
ASCII[recentLetter-1]=(int)phrase[recentLetter-1];
}
for (int recentLetter=1; recentLetter<=length; recentLetter++)
{
newASCII = ASCII[recentLetter-1]+length;
if(newASCII>122)
newASCII=newASCII-26;
phrase[recentLetter-1]=(char)newASCII;
}
}
void decode()
{
int ASCII[255];
int newASCII;
for (int recentLetter=1; recentLetter<=length; recentLetter++)
{
// Array mit ASCII-Werten der Zeichen füllen
ASCII[recentLetter-1]=(int)phrase[recentLetter-1];
}
for (int recentLetter=1; recentLetter<=length; recentLetter++)
{
newASCII = ASCII[recentLetter-1]-length;
if(newASCII<97)
newASCII=newASCII+26;
phrase[recentLetter-1]=(char)newASCII;
}
}
};
EDIT: For-Schleifen korrigiert