Зашифрованное слово не выводится, а появляется последовательность из одинаковых букв - C (СИ)
Формулировка задачи:
Нужно, чтобы программа зашифровала текст, введеный пользователем.
У меня такой алгоритм, что берется буква из слова и заменяется на другую.
Проблема в том, что зашифрованное слово не выводится, а появляется последовательность из одинаковых букв.
Помогите это исправить
# include <stdio.h>
# include <math.h>
# include <conio.h>
char str[80];
char zam[2][26]={'a','b','c','d','i','f','g','h','i','j','k','l','m','n','o',
'p','q','r','s','t','u','v','w','x','y','z',
'z','y','x','w','v','u','t','s','r','q','p','o','n','m','l',
'k','j','i','h','g','f','i','d','c','b','a'};
char rez[80];
void main()
{
printf ("\n vvedite frazu: ");
gets(str);
{
int i, k;
for (i=0; i<strlen(str); i++)
{
for (k=0; k<26; k++)
if (str[i]=zam[0][k])
{
str[i]=zam[1][k];
}
}
printf ("%s", str);
}
}Решение задачи: «Зашифрованное слово не выводится, а появляется последовательность из одинаковых букв»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
char ciphering(char input[80], char code[2][26], char result[80], int a, int b)
{
int i, j = 0, k;
for (i = 0; i < strlen(input); i++){
if(input[i] == ' '){
result[j] = ' ';
j++;
}
else
for (k = 0; k < 26; k++){
if (input[i]== code[a][k]){
result[j] = code[b][k];
j++;
}
}
}
result[j] = '\0';
j = 0;
return result[80];
}
int main()
{
char str[80], res[80], dec[80];
char sub[2][26]={{'a','b','c','d','e','f','g','h','i','j','k','l','m',
'n','o','p','q','r','s','t','u','v','w','x','y','z'},
{'&','=','|','!','+','>','$','*','@','1','~','7','`',
',','"','<','.','?',';','%',':','^','9','#','-','/'}};
printf ("Input text(only letters and spaces):\n ");
fgets(str, 80, stdin);
ciphering(str, sub, res, 0, 1);
puts(res);
ciphering(res, sub, dec, 1, 0);
puts(dec);
return 0;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы для работы с консолью и строками
- Определяется функция ciphering, которая принимает на вход:
- введенный текст в виде массива символов input
- таблицу с кодировкой в виде массива подстановок code
- массив для хранения результата расшифровки result
- два целочисленных параметра a и b, которые определяют номер строки и столбца в таблице подстановок соответственно
- Внутри функции происходит итерация по каждому символу входного текста
- Если текущий символ является пробелом, то в результат записывается пробел
- Если текущий символ не является пробелом, то происходит итерация по каждому столбцу в таблице подстановок
- Если символ в таблице подстановок совпадает с текущим символом, то в результат записывается символ из соответствующей строки таблицы подстановок
- Результат выводится на экран
- В функции main происходит считывание входного текста с клавиатуры
- Вызывается функция ciphering для шифрования введенного текста
- Выводится зашифрованный текст
- Вызывается функция ciphering для расшифровки зашифрованного текста
- Выводится расшифрованный текст