Вывод не то, что я ожидаю, код не печатает никаких ошибок, и я не знаю, что происходит не так - PullRequest
0 голосов
/ 05 июня 2019

Vigenere cipher Принимает текст и выводит зашифрованную версию этого текста, пользователь вводит ключевое слово в командной строке и текст, для которого пользователь желает зашифровать.Если вы знакомы с шифром Ceasar, это почти то же самое, за исключением небольшого незначительного изменения, вместо того, чтобы вводить фактическое значение сдвига, вместо этого мы вводим ключевое слово, а буквы в ключевом слове представляют вместо этого значение сдвига.

#include <cs50.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int shift(char c);

int main(int argc, string argv[])
{    
    //checks for alphabetic characters
    if (argc == 2)
    {
        for (int i = 0, n = strlen(argv[1]); i < n; i++)
        {
            if (isalpha(argv[1][i]) == false)
            {
                printf("Usage: ./vigenere keyword. \n");
                return 1;
            }
        }

        //promting the user for text
        string text = get_string("plaintext:  ");
        printf("ciphertext: ");

        //Intializing variables
        string key = argv[1];
        int l = strlen(key);

        for (int j = 0, k = 0, m = strlen(text); j < m; j++)    
        {
            if (islower(text[j]))
            {
                //lower cap letter enter here 
                printf("%c", 'a' + ( text[j] - 'a' + shift(key[k % l]) ) % 26);
                k++;
            }               
            else if (isupper(text[j]))
            {
                //Upper caps letter enter here
                printf("%c", 'A' + ( text[j] - 'A' + shift(key[k % l]) ) % 26);
                k++;
            } 
            else
            {
                //The rest whatever left enter here 
                printf("%c", text[j]);
            }
        }
        printf("\n");
        return 0;
    }
    else
    {
        printf("Usage: ./vigenere keyword. \n");
        return 1;
    }
}

//This function calculates the shift value per character 
int shift(char c)
{
    return ( islower(c) - 'a' );
}

проблема в том, что результат не соответствует ожиданиям.Например, если ключевое слово «b», а текст «привет», вывод должен быть «ifmmp», но это не так.Я не знаю, что идет не так.

...