我正在CS50 Pset2上尝试Vigenere。
我正在创建一个新的数组,其长度与关键字相同,以移至其对应的数字。
但是我没有得到正确的答案,知道是什么问题吗?
//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:
这是错误的。