I am creating a program in C++ that encrypts text using the Caesar Cipher it allows the user to pick the offset that is used to encrypt at the moment i have on written it for offset 1 but when i use replace()function as part of the STL, rather than replacing them with the specified characters they should be replaced to it replaces them all with the same letter
#include <iostream> #include <string> #include <algorithm> using namespace std; int main() { int Offset; string Message; cout << "What Would You Like To Offset By" << endl; cin >> Offset; cout << "Please Enter The Text You Would Like To Encrypt" << endl; cin >> Message; switch(Offset) { case 1: { replace(Message.begin(), Message.end(), 'a', 'b'); replace(Message.begin(), Message.end(), 'A', 'B'); replace(Message.begin(), Message.end(), 'b', 'c'); replace(Message.begin(), Message.end(), 'B', 'C'); replace(Message.begin(), Message.end(), 'c', 'd'); replace(Message.begin(), Message.end(), 'C', 'D'); replace(Message.begin(), Message.end(), 'd', 'e'); replace(Message.begin(), Message.end(), 'D', 'E'); replace(Message.begin(), Message.end(), 'e', 'f'); replace(Message.begin(), Message.end(), 'E', 'F'); replace(Message.begin(), Message.end(), 'f', 'g'); replace(Message.begin(), Message.end(), 'F', 'G'); replace(Message.begin(), Message.end(), 'g', 'h'); replace(Message.begin(), Message.end(), 'G', 'H'); replace(Message.begin(), Message.end(), 'h', 'i'); replace(Message.begin(), Message.end(), 'H', 'I'); replace(Message.begin(), Message.end(), 'i', 'j'); replace(Message.begin(), Message.end(), 'I', 'J'); replace(Message.begin(), Message.end(), 'j', 'k'); replace(Message.begin(), Message.end(), 'J', 'K'); replace(Message.begin(), Message.end(), 'k', 'l'); replace(Message.begin(), Message.end(), 'K', 'L'); replace(Message.begin(), Message.end(), 'l', 'm'); replace(Message.begin(), Message.end(), 'L', 'M'); replace(Message.begin(), Message.end(), 'm', 'n'); replace(Message.begin(), Message.end(), 'M', 'N'); replace(Message.begin(), Message.end(), 'n', 'o'); replace(Message.begin(), Message.end(), 'N', 'O'); replace(Message.begin(), Message.end(), 'o', 'p'); replace(Message.begin(), Message.end(), 'O', 'P'); replace(Message.begin(), Message.end(), 'p', 'q'); replace(Message.begin(), Message.end(), 'P', 'Q'); replace(Message.begin(), Message.end(), 'q', 'r'); replace(Message.begin(), Message.end(), 'Q', 'R'); replace(Message.begin(), Message.end(), 'r', 's'); replace(Message.begin(), Message.end(), 'R', 'S'); replace(Message.begin(), Message.end(), 's', 't'); replace(Message.begin(), Message.end(), 'S', 'T'); replace(Message.begin(), Message.end(), 't', 'u'); replace(Message.begin(), Message.end(), 'T', 'U'); replace(Message.begin(), Message.end(), 'u', 'v'); replace(Message.begin(), Message.end(), 'U', 'V'); replace(Message.begin(), Message.end(), 'v', 'w'); replace(Message.begin(), Message.end(), 'V', 'W'); replace(Message.begin(), Message.end(), 'w', 'x'); replace(Message.begin(), Message.end(), 'W', 'X'); replace(Message.begin(), Message.end(), 'x', 'y'); replace(Message.begin(), Message.end(), 'X', 'Y'); replace(Message.begin(), Message.end(), 'y', 'z'); replace(Message.begin(), Message.end(), 'Y', 'Z'); replace(Message.begin(), Message.end(), 'z', 'a'); replace(Message.begin(), Message.end(), 'Z', 'A'); cout << Message << endl; break; } } }
'a'with'b', then replaces'b'with'c', then replaces'c'with'd', and so on. I'll bet everything is ending up as'a'or'A'.\0) that you can use as a temporary value and then applying change in reverse other. And you would need to do it twice once for uppercase and once for lowercase. However, that kind of code is very slow as you scan the string 52 times multiplied by its length (54 with my adjustment). A much better approach would be to update string one character at a time using some mapping (std::transformor something similar)switch(Offset)means that you would have a lot of similar code. If you really intent to make 25 or so switch cases, then you clearly need to read a few books on code design.