@Buba235
Vielen Dank für den Link. Ich habe mich dort umgeschaut und viele gute Ansätze und Tipps gefunden!
@Flegmon
Danke, dass du dir die Mühe gemacht hast, mein Programm anzuschauen!
Du hast Recht, was die Schleifen betrifft. Ich habe daher mein Programm noch einmal überarbeitet.
Voilà:
Code:
// main.cpp - Caesar Verschiebung
#include <iostream>
#include <conio>
#include <stdio>
using namespace std;
int main()
{
int auswahl, i = 0;
char klartext[50], geheimtext[50];
do
{
for(i = 0; i <= 50; i++)
{
klartext[i] = ' ';
geheimtext[i] = ' ';
}
clrscr();
cout << endl;
cout << "\n- Caesar Verschiebung - v1.0" << endl << endl;
cout << "Menueauswahl:" << endl;
cout << "Nachricht verschluesseln [1]" << endl;
cout << "Nachricht entschluesseln [2]" << endl;
cout << "Programm beenden [3]" << endl << endl;
cout << "Ihre Auswahl: ";
cin >> auswahl;
switch(auswahl)
{
case 1: cout << "Bitte zu entschluesselnde Nachricht (max. 50 Zeichen) eingeben: " << endl;
cin >> klartext;
for(i = 0; klartext[i] != '\0'; i++)
{
if(klartext[i] == 'z')
{
geheimtext[i] = 'a';
}
else
{
if(klartext[i] == 'Z')
{
geheimtext[i] = 'A';
}
else
{
geheimtext[i] = klartext[i] + 1;
}
}
}
cout << "Verschluesselte Nachricht lautet: " << endl << geheimtext << endl;
break;
case 2: cout << "\nBitte zu entschluesselnde Nachricht (max. 50 Zeichen) eingeben: " << endl;
cin >> geheimtext;
for(i = 0; geheimtext[i] != '\0'; i++)
{
if(geheimtext[i] == 'a')
{
klartext[i] = 'z';
}
else
{
if(geheimtext[i] == 'A')
{
klartext[i] = 'Z';
}
else
{
klartext[i] = geheimtext[i] - 1;
}
}
}
cout << "Entschluesselte Nachricht lautet: " << endl << klartext << endl;
break;
}
} while(auswahl != 3);
return 0;
}
Mit deinem Tipp funktioniert es recht gut.
Ich habe zusätzlich 2 if-Verzweigungen eingebaut, um dem Problem, dass z nicht zu a wird, zu entgehen. Meine Lösung scheint mir aber nicht sehr elegant..
Ein weiteres Problem besteht darin, dass meine Zeichenanzahl auf 50 beschränkt ist. Wie kann ich sie unbeschränkt machen bzw. so einstellen, dass sie sich daraus ergibt, wieviel man eingibt?
Muss ich außerdem den Array klartext und geheimtext in einer for-Schleife durchlaufen lassen, um alle Zeichen auf "leer" zu setzen?
So wie ich es hier, am Anfang des Progamms, gemacht habe:
Code:
for(i = 0; i <= 50; i++)
{
klartext[i] = ' ';
geheimtext[i] = ' ';
}
Beste Grüße
Cyraid