Шифрования слова на английском языке путем перемешивания букв - C (СИ)
Формулировка задачи:
Составить алгоритм и написать приложение для шифрования слова на
английском языке путем перемешивания букв (например, первой буквы с четвертой, второй –
с пятой и т.д.) и добавления новых символов. В программе вывести исходное слово,
закодированное и декодированное.
Решение задачи: «Шифрования слова на английском языке путем перемешивания букв»
textual
Листинг программы
#include <stdio.h> // подключаем библиотеку ввода вывода
#include <string.h> // библиотека работы со строками
int inputs(char *s, char *dop, int n) // функция ввода с проверкой
{
puts("entr input line");
gets_s(s, n);
puts("entr input dop line");
gets_s(dop, n);
int step = 0; // инициализируем шаг 0
while (step == 0) // проверка правильности ввода шага
{
puts("entr step");
scanf_s("%d", &step);
if (step < 1 && step >= strlen(s) - 1) // шаг не может привышать величину входной строки
{
puts("incorrect step");
step = 0; // зацикливаем ввод
}
}
return step;
}
void shifr(char *a, char *b, char *dop, int step) // функция шифрования
{
for (unsigned int i = 0; i < strlen(a); i++)
b[i] = a[(i + step) % strlen(a)];
strcat_s(b, 256, dop);
}
void onshifr(char *a, char *b, char *dop, int step) // функция дешифрования
{
for (unsigned int i = 0; i < strlen(a) - strlen(dop); i++)
b[(i + step) % (strlen(a) - strlen(dop))] = a[i];
}
int main()
{
const int n = 256; // максимальный размер строк
char input[n] = { '\0' }, output1[n] = { '\0' }, output2[n] = { '\0' }, dop[n] = { '\0' }; // исходная строка, зашифрованная строка, декодированная строка, строка дополнительных символов
int step; // шаг ввхода
step = inputs(input, dop, n);
shifr(input, output1, dop, step);
onshifr(output1, output2, dop, step);
puts("input line ");
puts(input);
puts("shifr line ");
puts(output1);
puts("unshifr line ");
puts(output2);
return 0;
}
Объяснение кода листинга программы
- Ввод строки, которую необходимо зашифровать, и строки дополнительных символов с помощью функции
gets_s(). - Ввод шага шифрования с помощью функции
scanf_s(). - Проверка корректности введенного шага: он не может быть меньше 1 и больше длины входной строки минус 1.
- Если шаг корректен, то его значение присваивается переменной
step. - Если шаг некорректен, то цикл ввода продолжается.
- Ввод дополнительных символов.
- Вызов функции
shifr(), которая шифрует входную строку с помощью заданного шага и добавляет дополнительные символы. - Вызов функции
onshifr(), которая дешифрует зашифрованную строку с помощью того же шага и дополнительных символов. - Вывод исходной строки, зашифрованной строки, дополнительных символов, а также дешифрованной строки.