Question #36563

The Caesar cipher is actually a letter shifter that can shift a letter to a different position. For example, to encrypt English word, “apple”, the Caesar cipher may simply shift each letter of the word right by 2 positions creating the new word “crrng”; therefore “a” becomes “c”; “p” becomes “r”; “l” becomes “n”; and “e” becomes “g”. Following the convention, we here call “apple” plaintext, “crrng” ciphertext, and “2” encryption key. To decrypt “crrng”, the Caesar cipher simply shifts each letter of “crrng” left by 2 positions.
Write a C++ program that consists of three major components: 0) encryption, 1) decryption, and 2) echo, where “echo” means that when you enter a key and a plaintext, it will print out the same plaintext. Note that characters are entered one after the other and terminated by “;”. String type is not allowed to be used here. Also, the maximum value of a key is 25 and use only lowercase letters with no spaces(s) between letters.

NO STRING PLEASE !!!
1

Expert's answer

2013-11-01T06:29:54-0400
#include "stdafx.h"
#include <iostream>
using namespace std;
char letters[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
size_t letters_size = 26;
size_t index_of_letter(char s) {
for (size_t i = 0; i < letters_size; ++i) {
if (letters[i] == s) {
return i;
}
}
return -1;
}
char encrypt_letter(char s, size_t key) {
size_t s_index = index_of_letter(s);
size_t res_index = (s_index + key) % letters_size;
return letters[res_index];
}
char* encrypt(int key, char* message, size_t message_length) {
char* result = new char[message_length];
for (size_t i = 0; i < message_length; ++i) {
result[i] = encrypt_letter(message[i], key);
}
return result;
}
char decrypt_letter(char s, size_t key) {
size_t s_index = index_of_letter(s);
size_t res_index = s_index - key;
if (res_index < 0) {
res_index = res_index + letters_size;
}
return letters[res_index];
}
char* decrypt(int key, char* message, size_t message_length) {
char* result = new char[message_length];
for (size_t i = 0; i < message_length; ++i) {
result[i] = decrypt_letter(message[i], key);
}
return result;
}
void show_message(char* message, size_t message_length) {
for (size_t i = 0; i < message_length; ++i) {
cout << message[i];
}
cout << endl;
}
int main()
{
char* message = new char[1000];
size_t message_length = 0;
int key = 10;
cout << "Enter message letter one by one and finishing by the symbol; " << endl;
char curr = ' ';
size_t i = 0;
while (curr != ';') {
cin >> curr;
if (curr != ';') {
message[i] = curr;
++i;
}
}
message_length = i;
cout << "Input message: ";
show_message(message, message_length);
char * encrypted_message = encrypt(key, message, message_length);
cout << "Encrypted message: ";
show_message(encrypted_message, message_length);
char * decrypted_message = decrypt(key, encrypted_message, message_length);
cout << "Decrypted message: ";
show_message(decrypted_message, message_length);
return 0;
}

Need a fast expert's response?

Submit order

and get a quick answer at the best price

for any assignment or question with DETAILED EXPLANATIONS!

Comments

No comments. Be the first!
LATEST TUTORIALS
APPROVED BY CLIENTS