Я создал программу, которая принимает «слово» и параметр 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;
}
Игнорировать знаки препинания, Я бы предположил, что внутри вашего 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
представляется в числовой форме)