#include #include using namespace std; bool GetContinue(); int GetShift(); string GetPlainText(); string Encrypt(string text, int shift); void PrintText(string text); int main() { bool keepGoing{false}; string plainText; string cryptText; int shift; keepGoing = GetContinue(); while (keepGoing) { shift = GetShift(); plainText = GetPlainText(); cryptText = Encrypt(plainText, shift); PrintText(cryptText); keepGoing = GetContinue(); } return 0; } string ToLower(string s) { size_t i; for( i = 0; i < s.size(); ++i ) { s[i] = tolower(s[i]); } return s; } bool GetContinue(){ string answer; while (answer!= "yes" and answer != "no") { cout << "Do you wish to encrypt a message (yes/no)? "; getline(cin, answer); cout << endl; answer= ToLower(answer); } while (answer!= "yes" and answer != "no"); return answer == "yes"; } int FixShift(int value) { while (value < 0) { value += 26; } return value % 26; } int GetShift(){ int value; cout << "Enter the shift amount => "; cin >> value; cout << endl; cin.ignore(100,'\n'); return FixShift(value); } string GetPlainText(){ string plainText; cout << "Enter the message to encrypt on one line: "; getline(cin, plainText); cout << endl; return plainText; } char RealShift(char letter, int shift) { int offset; offset = letter - 'a'; offset += shift; offset = FixShift(offset); return static_cast('a' + offset); } char DoShift(char letter, int shift) { bool isUpper{false}; char shifted{letter}; if (isalpha(letter) ) { isUpper = isupper(letter); letter = tolower(letter); shifted = RealShift(letter, shift); if (isUpper) { shifted = toupper(shifted); } } return shifted; } string Encrypt(string text, int shift ){ size_t i; for(i =0; i < text.size(); ++i) { text[i] = DoShift(text[i], shift); } return text; } void PrintText(string text){ cout << text << endl; }