【问题标题】:Vigenere BaZ key frustrationVigenere BaZ 键受挫
【发布时间】:2016-12-10 10:04:55
【问题描述】:

我已经处理了许多关于 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;

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

【问题讨论】:

    标签: cs50 vigenere


    【解决方案1】:

    您为一个字母提供了多个输出。您必须在第一个“if”之后使用“else if”。或者在第一个大 if 块的末尾创建 n++ 。在第一个内部 if 块增加 n 可能会导致它也进入第二个 if 块,因为 k[n] 发生变化。

    【讨论】:

    • 我觉得自己很愚蠢......我从课堂笔记中检查了所有内容,从这里和 reddit 阅读了各种各样的问题,这和“其他”一样明显如果'。我也许应该休息一下,让我的大脑重置!非常感谢t.m.!!!!对此,我真的非常感激。 :D
    • 它发生了:)。继续努力,确保你在明年之前完成课程和硬件。它将被重置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2013-01-01
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    相关资源
    最近更新 更多