Написание Vigenere Cipher в C (Хранить пробелы) - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь написать Vigenere Cipher (в c), где хранятся пробелы. поэтому, если бы мне было дано простое сообщение «привет, как дела», шифр был бы в таком виде «abcde fgh ijk lmn», все, что я хочу, это сохранить пробелы. Я работал над этим некоторое время. Любая помощь будет оценена.

Вот мой код

void CipherText(char* plainText, char* cipherKey)
{
    int keyLength = strlen(cipherKey);
    char cipherText;

    for(int i = 0; i < strlen(plainText); i++)
    {

        int cipherText = (unsigned char)plainText[i];

        cipherText = ((int)plainText[i]-97+(int)tolower(cipherKey[i])-97)%26 + 'A';

        putchar(cipherText);
    }
    putchar('\n');
}

1 Ответ

1 голос
/ 31 января 2020

Проверьте, является ли символ алфавитом c, прежде чем пытаться преобразовать (закодировать) его. Кроме того, не используйте цифры для кодов символов - используйте 'a' вместо 97, например. Я удалил некоторые броски, которые не нужны. Я также использовал cipherText вместо (int)plainText[i], поскольку это позволяет избежать нежелательного расширения знака. Я также добавил несколько пробелов; код легче читать, если использовать пробелы разумно.

void CipherText(char* plainText, char* cipherKey)
{
    int keyLength = strlen(cipherKey);
    char cipherText;

    for(int i = 0; i < strlen(plainText); i++)
    {
        int cipherText = (unsigned char)plainText[i];
        if (isalpha(cipherText))
            cipherText = (cipherText - 'a' + tolower(cipherKey[i]) - 'a') % 26 + 'A';
        putchar(cipherText);
    }
    putchar('\n');
}
...