Зашифрованное слово не выводится, а появляется последовательность из одинаковых букв - 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;
}

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы для работы с консолью и строками
  2. Определяется функция ciphering, которая принимает на вход:
    • введенный текст в виде массива символов input
    • таблицу с кодировкой в виде массива подстановок code
    • массив для хранения результата расшифровки result
    • два целочисленных параметра a и b, которые определяют номер строки и столбца в таблице подстановок соответственно
  3. Внутри функции происходит итерация по каждому символу входного текста
  4. Если текущий символ является пробелом, то в результат записывается пробел
  5. Если текущий символ не является пробелом, то происходит итерация по каждому столбцу в таблице подстановок
  6. Если символ в таблице подстановок совпадает с текущим символом, то в результат записывается символ из соответствующей строки таблицы подстановок
  7. Результат выводится на экран
  8. В функции main происходит считывание входного текста с клавиатуры
  9. Вызывается функция ciphering для шифрования введенного текста
  10. Выводится зашифрованный текст
  11. Вызывается функция ciphering для расшифровки зашифрованного текста
  12. Выводится расшифрованный текст

Оцени полезность:

9   голосов , оценка 4.333 из 5
Похожие ответы