我在问题集2中解决Vigenere密码遇到了困难。我差不多完成了。当我第一次使用明文./vigenere ABC
运行命令HELLO
时,它会给我写回答(密文):HFNLP
。但是,当我使用明文./vigenere bacon
执行Meet me at the park at eleven am
时,它并没有给我正确答案。
代码:
int main(int argc, string argv[])
{
string kword = argv[1];
if(argc !=2)
{
printf("Usage: ./vigenere k \n");
return 1;
}
else
{
for(int i = 0, n = strlen(kword); i<n; i++)
{
if(!isalpha(kword[i]))
{
printf("Usage: ./vigenere k \n");
return 1;
}
}
}
int keylen = strlen(kword);
printf("Enter Plain Text:\n");
string p = get_string();
if (p != NULL)
{
for (int i = 0, j = 0, n = strlen(p); i<n; i++)
{
if(isalpha(p[i]))
{
if (islower(p[i]))
{
printf("%c",((p[i] - 97) + (j % keylen) % 26) + 97);
j++;
}
else if (isupper(p[i]))
{
printf("%c", ((p[i] - 65) + (j % keylen) % 26) + 65);
j++;
}
}
else
printf("%c", p[i]);
}
printf("\n");
}
return 0;
}