Felix har ret, og det der er ikke ROT13. Det er en meget mærkelig implementering af ROT26 (et navn jeg lige fandt på).
ROT13 tager ikke højde for store og små bogstaver. Derudover er ROT13 ikke en krypterings algoritme men en scramblings algoritme og kan implementeres mere effektivt algebraisk:
#include <string>
#include <iostream>
using std::string;
using std::cout;
using std::cin;
using std::endl;
int main (int argc, char ** argv) {
string plain;
string scrambled;
int i;
char c;
cout << "Write something: ";
cout.flush();
getline(cin, plain);
for (i = 0; i < plain.size(); i++) {
//Get the i'th character and convert it to upper case
c = plain[i] & ~0x20;
//Check whether or not the character is legal
if (c >= 'A' && c <= 'Z') {
//ROT13 scramble the character
c = (((c - 'A') + 13) % 26) + 'A';
scrambled += c;
} else {
//This is not a legal character so just copy the original
scrambled += plain[i];
}
}
cout << "The scrambled version is: " << scrambled << endl;
return 0;
}
...og det ser ud til at virke:
robert@robert-laptop:~$ make test
g++ test.cpp -o test
robert@robert-laptop:~$ ./test
Write something: Hello World!!!
The scrambled version is: URYYB JBEYQ!!!
robert@robert-laptop:~$ ./test
Write something: URYYB JBEYQ!!!
The scrambled version is: HELLO WORLD!!!
robert@robert-laptop:~$