Ich wollte mal die Ceasar-Verschlüsslung in C++ schreiben und bin auf ein problem gestossen beim verschlüsseln kommen bei immer Sonderzeichen raus wen die Chiffre größer als 30 ist.
Hier der Code :
Code:
#include <iostream>
#include <string>
char zver(char c,int vers) //Zeichen Verschlüsseln
{
int i = c;
i += vers;
if(i > 122) //soll 25 von dem Buchstaben abziehen wen er größer als 97 ist
i -= 25;
c = i;
return c;
}
char zent(char c,int vers) //Zeichen Entschlüsseln
{
int i = c;
i -= vers;
if(i < 97) //soll 25 zu dem Buchstaben addieren wen er kleiner als 97 ist
i += 25;
c = i;
return c;
}
std::string txtver(std::string s,int vers) //Soll für jeden Buchstaben des Textes die Funktion "zver" aufrufen
{
for(unsigned int i = 0; i < s.length(); i++)
{
s[i] = zver(s[i],vers);
}
return s;
}
std::string txtent(std::string s,int vers) //Das gleiche wie oben nur halt Entschlüsseln
{
for(unsigned int i = 0; i < s.length(); i++)
{
s[i] = zent(s[i],vers);
}
return s;
}
int main() //hauptprogramm
{
int vers;
std::string s;
int eingabe;
do
{
std::cout << "---Ceasar-Verschluesslung---" << std::endl;
std::cout << "<1> Verschluesseln" << std::endl;
std::cout << "<2> Entschluesseln" << std::endl;
std::cout << "<3> Beenden" << std::endl;
std::cout << std::endl << "Eingabe : ";
std::cin >> eingabe;
std::cin.ignore();
switch(eingabe)
{
case 1 :
std::cout << std::endl << "Text : ";
getline(std::cin,s);
std::cout << std::endl << "Chiffre : ";
std::cin >> vers;
std::cout << std::endl << "Verschluesselter Text : " << txtver(s,vers) << std::endl << std::endl;
break;
case 2 :
std::cout << std::endl << "Test : ";
getline(std::cin,s);
std::cout << std::endl << "Chiffre : ";
std::cin >> vers;
std::cout << std::endl << "Entschluesselter Text : " << txtent(s,vers) << std::endl << std::endl;
break;
}
}
while(eingabe != 3);
return 0;
}
Bin mir nicht sicher ob das euch hilft ich arbeite unter Linux!
Danke im vorraus!







