Сложность с Цезарем

Я создал программу, которая принимает «слово» и параметр num в качестве смещающего числа. Пример, если строка Caesar Cipher и число равно 2, выход должен быть Ecguct Ekrjgt, Но я хочу, чтобы пунктуация, пробелы и заглавные буквы оставались нетронутыми. Также я не могу добавить предложение. Просто слово. Мне не разрешено использовать строки.

#include<iostream>
using namespace std;

int main()
{
char name[50] = { '\0' };
int cipherKey, len;

cout << "Enter cipher key: ";
cin >> cipherKey;

cout << "Enter a message to encrypt: ";
cin >> name;

len = strlen(name); // this code just inputs the length of a word. after spaces it won't calculate.

for (int i = 0; i < len; i++)
{
char temp = name[i] + cipherKey;
cout << temp;
}
cout << "\n\n";

return 0;
}

-2

Решение

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

for (int i = 0; i < len; i++)
{
if( name[i]==' ' || name[i]==',' || name[i]=='.' /*...etc...*/ )
cout << name[i];
else {
char temp = name[i] + cipherKey;
cout << temp;
}
}

Утомительно набирать его для каждого специального символа, но с ++ вроде как: P

Чтобы шифр работал: как уже упоминалось в комментариях, строка

char temp = name[i] + cipherKey;

не всегда будет делать то, что вы ожидаете. В частности, вы хотите, чтобы обернуть вокруг, если name[i]+cipherkey это конец алфавита. Я оставлю это для вас, чтобы выяснить. (подсказка: Google ‘ASCII values’, чтобы увидеть, как char представляется в числовой форме)

1

Другие решения