Я пытаюсь Vigenere на CS50 Pset2.
Я создаю новый массив такой же длины, что и ключевое слово, чтобы перейти к его цифре.
Однако я не получаю правильный ответ, есть идеи, в чем проблема?
//Ciphering Function
string plainToCipher(string plainText,string keyword)
{
int i = strlen(plainText);
int k = strlen(keyword); //used for modular cycle
int i1 = 0;
char newstring[k];
//shifts keyword string to its digit counterpart
do
{
if(keyword[i1]>='a')
{
newstring[i1] = keyword [i1] - 'a';
}
else
{
newstring[i1] = keyword[i1] - 'A';
printf("%c", newstring[i1]);
}
i1++;
}while(i1<k);
int j = 0;
do
{
if(plainText[j] >= 'a' && plainText[j] <= 'z')
{
plainText[j] = ((plainText[j] - 'a') + ( (newstring[j%k]-'0') )) % 26 + 'a';
}
else if(plainText[j] >= 'A' && plainText[j] <= 'Z')
{
plainText[j] = ((plainText[j] - 'A') + ( (newstring[j%k]-'0') )) % 26 + 'A';
}
j++;
}while(j<i);
return plainText;
}
Мой ответ:
~/ $ ./vigenere abc
plaintext: HELLO
ciphertext: 2086:
И это неправильно.