Vigenere BaZ关键受挫

时间:2016-12-10 10:04:55

标签: cs50 vigenere

我已经完成了很多有关Vigenere问题的堆栈和reddit问题。我非常接近搞清楚,我可以品尝它!

过去几个小时我一直在研究BaZ钥匙的问题,并准备好把头发拉出来。我的cs50检查返回:

:(使用“BaZ”作为关键字将“BaRFoo”加密为“CaQGon”

\期望输出,但不是“CBzSREpon \ n”

我已经检查了大小写的大小写,并且尽可能地按照逻辑方式处理了所有内容。在这一点上,我一直盯着我的屏幕太长时间,我错过了一些东西。

这是我的代码:

for (i = 0, l = strlen(p); i < l; i++)
{
    if (isalpha(p[i]))
    {
        if (isupper(p[i]) && isupper(k[n]))
        {
            int c = (p[i] - 65 + ((k[n]) - 65)) % 26;
            printf("%c", c + 65);
            n++;
        }
        if (isupper(p[i]) && islower(k[n]))
        {
            int c = (p[i] - 65 + (k[n] - 97)) % 26;
            printf("%c", c + 65);
            n++;
        }
        if (islower(p[i]) && islower(k[n]))
        {
            int c = (p[i] - 97 + (k[n] - 97)) % 26;
            printf("%c", c + 97);
            n++;
        }
        if (islower(p[i]) && isupper(k[n]))
        {
            int c = (p[i] - 97 + ((k[n]) - 65)) % 26;
            printf("%c", c + 97);
            n++;
        }
        if (n == g)
            n = 0;
    }
    if (!isalpha(p[i]))
    {
        printf("%c", p[i]);
    }
}
printf("\n");

return 0;

我错过了什么?有人请在我去秃头之前帮助我!

1 个答案:

答案 0 :(得分:0)

您为一个字母提供了多个输出。如果&#34;你必须使用&#34;否则在第一次&#34;如果&#34; s。或者在第一个大块if的末尾创建n ++。如果k [n]改变,则在第一个内部if块处递增n可能导致它进入第二个块,因为k [n]会改变。