С++
Написать код программы для реализации алгоритма шифрования "Шифр Цезаря"
Шифр Цезаря — это вид шифра подстановки, в котором каждый символ в открытом тексте заменяется символом, находящимся на некотором постоянном числе позиций левее или правее него в алфавите.
Обязательное условие – украинский алфавит
Чтобы было меньше проблем, используйте большие буквы.
Answers & Comments
Объяснение:
#include <iostream>
#include <string>
using namespace std;
// Функция для шифрования строки на основе ключа
string encrypt(string text, int key) {
string result = "";
int n = text.length();
for (int i = 0; i < n; i++) {
// Получаем код символа
int code = text[i];
// Если символ - буква украинского алфавита (в верхнем регистре)
if (code >= 1040 && code <= 1071) {
// Вычисляем новый код символа
code = (code - 1040 + key) % 32 + 1040;
}
// Добавляем символ к результату
result += (char)code;
}
return result;
}
int main() {
// Задаем исходную строку и ключ
string text = "ПРИВІТ СВІТ";
int key = 5;
// Шифруем строку
string encrypted = encrypt(text, key);
// Выводим зашифрованную строку
cout << encrypted << endl;
return 0;
}
Ответ:
#include <iostream>
#include <string>
#include <locale>
using namespace std;
string encrypt(string plaintext, int shift) {
string ciphertext = "";
int n = plaintext.length();
for (int i = 0; i < n; i++) {
wchar_t c = plaintext[i];
if (c >= L'А' && c <= L'Я') {
c = ((c - L'А' + shift) % 33) + L'А';
}
ciphertext += c;
}
return ciphertext;
}
string decrypt(string ciphertext, int shift) {
string plaintext = "";
int n = ciphertext.length();
for (int i = 0; i < n; i++) {
wchar_t c = ciphertext[i];
if (c >= L'А' && c <= L'Я') {
c = ((c - L'А' - shift + 33) % 33) + L'А';
}
plaintext += c;
}
return plaintext;
}
int main() {
// установка локали для работы с украинским языком
setlocale(LC_ALL, "uk_UA.UTF-8");
string plaintext, ciphertext;
int shift;
cout << "Введите текст для шифрования: ";
getline(cin, plaintext);
cout << "Введите сдвиг: ";
cin >> shift;
ciphertext = encrypt(plaintext, shift);
cout << "Зашифрованный текст: " << ciphertext << endl;
plaintext = decrypt(ciphertext, shift);
cout << "Расшифрованный текст: " << plaintext << endl;
return 0;
}
#include
using namespace std;
const string ALPHABET = "АБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯ";
const int ALPHABET_SIZE = ALPHABET.size();
int main() {
int shift;
string plaintext;
cout << "Введите сдвиг: ";
cin >> shift;
cout << "Введите текст для шифрования: ";
cin >> plaintext;
string ciphertext = "";
for (char c : plaintext) {
int index = ALPHABET.find(c);
if (index == string::npos) {
// Символ не найден в алфавите, оставляем его без изменений
ciphertext += c;
} else {
// Применяем формулу для шифрования символа
int shifted_index = (index + shift) % ALPHABET_SIZE;
ciphertext += ALPHABET[shifted_index];
}
}
return 0;
}