Итак, вот решение, которое я пришел для решения проблемы V50-CS CS50;Я довольно новичок в программировании, всего несколько недель назад, поэтому я заранее прошу прощения за форму моего кода.
Проблема здесь в том, что результат не соответствует ожиданиям.
примеры:
. / Vigenere ABC
вход: привет
выход: hfnLp
. / Vigenere ABC
вход: HELLO
выход: HFN, P
. / Vigenere BACON
вход: Встретимся в парке в одиннадцать утра
выход:Neg zf av uf pCx bT gzrwEP OZ
(это должно быть "Negh zf av huf pcfx bt gzrwep oz")
Я не знаю, потому что это, кажется, работает немного, но кое-что выключено.
Я проверил почти все целые числа, которые я использую, все они действуют так, как я намеревался.
#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int main (int argc, string argv[])
{
string k = argv[1]; //key
string p; //plaintext
int j = 0; //the counter for key index
int ci; // the variable for reaching the right shifting value on both uppercase and lowercase letters
int K;//the value of the key index shift
if (argc != 2)
{
printf("input error\n");
}
else
{
p = get_string();
for (int i = 0, n = strlen(p); i < n; i++)
{
if (isupper(k[j]))
{
ci = 65;
}
else
{
ci = 97;
}
K = k[j % strlen(k)] - ci;
if (isalpha (p[i]))
{
printf("%c", p[i] + K);
j++;
}
else
{
printf("%c", p[i]);
}
}
printf("\n");
}
}