
Решить только на С++ Шифр Цезаря В шифре Цезаря каждый символ, являющийся буквой латинского
алфавита, заменяется на другой символ, k-тый по счёту в алфавите после данного. Если этот символ выходит за границы, то берётся соответствующий из начала строки. Например, для k=3 символ A заменяется на D, символ B — на E, символ C — на F, ..., символ Z – на C. Аналогично, строчные буквы заменяются на строчные буквы. Все остальные символы не меняются. Дана строка, зашифруйте её при помощи шифра Цезаря для k=3. Входные данные Дана строка из символов с ASCII кодами от 32 до 127 длиной не больше 10000 символов. Выходные данные Выведите ответ на задачу. Примеры Ввод In a hole in the ground there lived a hobbit. Вывод Lq d kroh lq wkh jurxqg wkhuh olyhg d kreelw.

Ответы на вопрос

Ответ:
#include <iostream>
#include <string>
#include <conio.h>
#include <stdlib.h>
#include <sstream>
#include <fstream>
using namespace std;
int main()
{
int k; //Переменная выбора - шифрование/дешифрование
int shift; //Величина сдвига
string result = ""; //Строка - результат
cout<<"Enter 1 for encryption and decryption of 2\n";
cin>>k;
switch (k) //Если k
{
case 1: //Если выбрано шифрование
{
cout<<"Enter value shift for encryption\n";
cin>>shift;
if (shift > 26)
shift = shift % 26; //Вычисление сдвига
cout<<"Read of file...\n";
setlocale(LC_ALL,"Russian");//Чтение файла
string s; //Строка считанная из файла
ifstream in("Test.txt");
getline(in,s);
cout<<"Text of file: \n"<<s<<endl;
in.close();
cout<<"Reading complete!\n";
cout<<"Encryption...\n";
for (int i = 0; i < s.length(); i++)
{
//Если не латиница
if (((int)(s[i]) < 65)||((int)(s[i]) > 122))
result += s[i];
//Если буква является строчной
if (((int)(s[i]) >= 97) && ((int)(s[i]) <= 122))
{
//Если буква, после сдвига выходит за пределы алфавита
if ((int)(s[i]) + shift > 122)
//Добавление в строку результатов символ
result += (char)((int)(s[i]) + shift - 26);
//Если буква может быть сдвинута в пределах алфавита
else
//Добавление в строку результатов символ
result += (char)((int)(s[i]) + shift);
}
//Если буква является прописной
if (((int)(s[i]) >= 65) && ((int)(s[i]) <= 90))
{
//Если буква, после сдвига выходит за пределы алфавита
if ((int)(s[i]) + shift > 90)
//Добавление в строку результатов символ
result += (char)((int)(s[i]) + shift - 26);
//Если буква может быть сдвинута в пределах алфавита
else
//Добавление в строку результатов символ
result += (char)((int)(s[i]) + shift);
}
}
cout<<"Encryption complete!\n";
cout<<"Result:\n";
cout<<result; //Вывод результата
break;
}
case 2: //Если выбрано дешифрование
{
cout<<"Enter value shift for decryption\n";
cin>>shift;
if (shift > 26)
shift = shift % 26;
cout<<"Read of file...\n";
setlocale(LC_ALL,"Russian");
string s;
ifstream in("Test.txt");
getline(in,s);
cout<<"Text of file: \n"<<s<<endl;
in.close();
cout<<"Reading complete!\n";
cout<<"Decryption...\n";
for (int i = 0; i < s.length(); i++)
{
//Если не латиница
if (((int)(s[i]) < 65)||((int)(s[i]) > 122))
result += s[i];
//Если буква является строчной
if (((int)(s[i]) >= 97) && ((int)(s[i]) <= 122))
{
//Если буква, после сдвига выходит за пределы алфавита
if ((int)(s[i]) - shift < 97)
//Добавление в строку результатов символ
result += (char)((int)(s[i]) - shift + 26);
//Если буква может быть сдвинута в пределах алфавита
else
//Добавление в строку результатов символ
result += (char)((int)(s[i]) - shift);
}
//Если буква является прописной
if (((int)(s[i]) >= 65) && ((int)(s[i]) <= 90))
{
//Если буква, после сдвига выходит за пределы алфавита
if ((int)(s[i]) - shift < 65)
//Добавление в строку результатов символ
result += (char)((int)(s[i]) - shift + 26);
//Если буква может быть сдвинута в пределах алфавита
else
//Добавление в строку результатов символ
result += (char)((int)(s[i]) - shift);
}
}
cout<<"Decryption complete!\n";
cout<<"Result:\n";
cout<<result; //Вывод результата
break;
}
default: //Если ошибочное значение
{
cout<<"Error value\n";
break;
}
}
getch();
return 0;
}
0



Ответ:
числа в if берутся из кодов ASCII
Объяснение:
#include <stdio.h>
#include <string.h>
int
main ()
{
char s[10001];
int i = 0;
for (int j = 0; j < 10001; j++) {
scanf("%c", &s[j]);
if (s[j] == '\n')
break;
}
while (s[i] != '\n')
{
if (((int)s[i] > 64 && (int)s[i] < 91) || ((int)s[i] > 96 && (int)s[i] < 123))
if ((int)s[i] > 124)
s[i] = (char)((int)s[i] - 92); //3-127+32=92
else
s[i] = (char)((int)s[i] + 3);
i++;
}
for (int j = 0; j < i; j++)
printf("%c", s[j]);
return 0;
}



Программа на C++ для шифрования строки с использованием шифра Цезаря с заданным значением k (в данном случае k=3) может выглядеть следующим образом:
cpp#include <iostream>
#include <string>
using namespace std;
// Функция для шифрования строки с помощью шифра Цезаря
string encryptCaesarCipher(const string& input, int k) {
string result = "";
for (char ch : input) {
if (isalpha(ch)) {
char base = islower(ch) ? 'a' : 'A';
result += char(((ch - base + k) % 26) + base);
} else {
result += ch;
}
}
return result;
}
int main() {
string input;
int k = 3; // Значение k для шифра Цезаря
cout << "Введите строку для шифрования: ";
getline(cin, input);
string encrypted = encryptCaesarCipher(input, k);
cout << "Зашифрованная строка: " << encrypted << endl;
return 0;
}
Этот код сначала определяет функцию encryptCaesarCipher
, которая принимает строку input
и значение k
, а затем шифрует строку, заменяя символы согласно правилам шифра Цезаря. В функции main
пользователь вводит строку, которая затем шифруется с использованием функции encryptCaesarCipher
, и результат выводится на экран.
Примечание: Этот код предназначен только для шифрования строки с использованием шифра Цезаря с k=3. Если вы хотите использовать другое значение k или декодировать зашифрованную строку, вам придется внести соответствующие изменения в код.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili