С++ Цезарь Шифр функции шифрования и дешифрования

-7

Итак, у меня есть задание сделать программу Caesar Cipher в C++ с этими требованиями:

    Следующие два объявления требуются глобально: const int SIZE = 200; const int SHIFT = 4;

      Объявите две функции, одну для кодирования и другую для декодирования. Сообщение должно храниться в массиве символов [не в строке], который должен быть объявлен в вашей основной функции. Размер этого массива - РАЗМЕР. Сообщение должно быть преобразовано в верхний регистр. Ожидается, что вы будете кодировать и декодировать только символы [не цифры или символы]. Когда пользователь заканчивает вводить сообщение, он нажимает клавишу ввода. Это нажатие клавиши не должно быть сохранено в массиве. Вывод программы должен быть отформатирован, как показано в примере вывода (включая пустые строки, интервал, регистр текста).
    Пример вывода

У меня есть две версии назначения, одна из которых работает более или менее, но не использует функции или делает все заглавными, а другая использует функции, но не работает. Как мне это исправить?

Работающий, но неправильный код:

#include<iostream>
#include<cmath>
#include <stdlib.h>
#include<stdio.h>
using namespace std;

int main()
{
const int SIZE = 200;
const int SHIFT = 4;
char message[SIZE], ch;
int i;
int key = SHIFT;

cout << "Enter a message (200 character limit): ";
cin.getline(message, SIZE);
cout << "\n" << message << endl;

for(i = 0; message[i] != '\0'; ++i){
ch = message[i];

if(ch >= 'a' && ch <= 'z'){
ch = ch + key;

if(ch > 'z'){
ch = ch - 'z' + 'a' - 1;
}

message[i] = ch;
}
else if(ch >= 'A' && ch <= 'Z'){
ch = ch + key;

if(ch > 'Z'){
ch = ch - 'Z' + 'A' - 1;
}

message[i] = ch;
}
}

cout << message << endl;

for(i = 0; message[i] != '\0'; ++i){
ch = message[i];

if(ch >= 'a' && ch <= 'z'){
ch = ch - key;

if(ch < 'a'){
ch = ch + 'z' - 'a' + 1;
}

message[i] = ch;
}
else if(ch >= 'A' && ch <= 'Z'){
ch = ch - key;

if(ch > 'a'){
ch = ch + 'Z' - 'A' + 1;
}

message[i] = ch;
}
}

cout << message << endl;

return 0;
}

Правильный формат, но не работает:

#include<iostream>
#include<cmath>
#include <stdlib.h>
#include<stdio.h>
using namespace std;

const int SIZE = 200;
const int SHIFT = 4;

int main()
{
char message[SIZE], ch;
int i;
int key = SHIFT;
cout << "Enter a message (200 character limit): ";
cin.getline(message, SIZE);
cout << "\n" << message << endl;
void encrypt();
cout << message << endl;
void decrypt();
cout << message << endl;

return 0;
}

encrypt()
{
char message[SIZE], ch;
int i;
int key = SHIFT;
for(i = 0; message[i] != '\0'; ++i){
ch = message[i];

if(ch >= 'a' && ch <= 'z'){
ch = ch + key;

if(ch > 'z'){
ch = ch - 'z' + 'a' - 1;
}

message[i] = ch;
}
else if(ch >= 'A' && ch <= 'Z'){
ch = ch + key;

if(ch > 'Z'){
ch = ch - 'Z' + 'A' - 1;
}

message[i] = ch;
}
}
}

decrypt()
{
char message[SIZE], ch;
int i;
int key = SHIFT;
for(i = 0; message[i] != '\0'; ++i){
ch = message[i];

if(ch >= 'a' && ch <= 'z'){
ch = ch - key;

if(ch < 'a'){
ch = ch + 'z' - 'a' + 1;
}

message[i] = ch;
}
else if(ch >= 'A' && ch <= 'Z'){
ch = ch - key;

if(ch > 'a'){
ch = ch + 'Z' - 'A' + 1;
}

message[i] = ch;
}
}
}

Изменение: Я посмотрел некоторые из ваших предложений парня и реализовал их, спасибо. Вторая версия, с функциями, теперь работает, но мне все еще нужно выяснить, как заставить ее превратить сообщение во все заглавные. Вот обновленный код:

Редактировать 2: Неважно, версия C++, которую я использую, странная, проверила ее на версии, которую использует моя школа, и она все еще не работает. Это просто повторяет сообщение 3 раза без изменений. Вот самая актуальная версия:

#include<iostream>
#include<cmath>
#include <stdlib.h>
#include<stdio.h>
using namespace std;

const int SIZE = 200;
const int SHIFT = 4;
char message[SIZE];

void encrypt()
{
char ch;
int i;
int key = SHIFT;
for(i = 0; message[i] != '\0'; ++i){
ch = message[i];

if(ch >= 'a' && ch <= 'z'){
ch = ch + key;

if(ch > 'z'){
ch = ch - 'z' + 'a' - 1;
}

message[i] = ch;
}
else if(ch >= 'A' && ch <= 'Z'){
ch = ch + key;

if(ch > 'Z'){
ch = ch - 'Z' + 'A' - 1;
}

message[i] = ch;
}
}
}

void decrypt()
{
char message[SIZE], ch;
int i;
int key = SHIFT;
for(i = 0; message[i] != '\0'; ++i){
ch = message[i];

if(ch >= 'a' && ch <= 'z'){
ch = ch - key;

if(ch < 'a'){
ch = ch + 'z' - 'a' + 1;
}

message[i] = ch;
}
else if(ch >= 'A' && ch <= 'Z'){
ch = ch - key;

if(ch > 'a'){
ch = ch + 'Z' - 'A' + 1;
}

message[i] = ch;
}
}
}

int main()
{
char message[SIZE];
cout << "Enter a message (200 character limit): ";
cin.getline(message, SIZE);
cout << "\n" << message << endl;
encrypt();
cout << message << endl;
decrypt();
cout << message << endl;

return 0;
}

спросил(а) 2019-04-11T22:32:00+03:00 10 месяцев, 2 недели назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема