Vigenere BaZ 关键挫折
Vigenere BaZ key frustration
我已经解决了很多关于 Vigenere 问题的堆栈和 reddit 问题。我快弄明白了,我可以尝尝了!
过去几个小时我一直在处理 BaZ 密钥的问题,我已经准备好了。我的 cs50 检查 returns:
:( 使用 "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;
我错过了什么?在我秃头之前,请有人帮助我!
您为一个字母提供了多个输出。您必须在第一个 "if" 之后使用 "else if"。或者在第一个大 if 块的末尾创建 n++ 。在第一个内部 if 块中递增 n 可能会导致它进入第二个 if 块,因为 k[n] 发生变化。
我已经解决了很多关于 Vigenere 问题的堆栈和 reddit 问题。我快弄明白了,我可以尝尝了!
过去几个小时我一直在处理 BaZ 密钥的问题,我已经准备好了。我的 cs50 检查 returns:
:( 使用 "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;
我错过了什么?在我秃头之前,请有人帮助我!
您为一个字母提供了多个输出。您必须在第一个 "if" 之后使用 "else if"。或者在第一个大 if 块的末尾创建 n++ 。在第一个内部 if 块中递增 n 可能会导致它进入第二个 if 块,因为 k[n] 发生变化。