我正在通过 EDX 学习哈佛大学的 CS50 类(class)(仅针对我自己,这不是评分作业)。我的 PSET2 维吉尼亚密码给出了错误的输出 - 例如, key 和输入 a
应该导致输出 a
,而是给出 t
。但是,我无法确定问题出在哪里。
#import <stdio.h>
#import <cs50.h>
#import <string.h>
#import <ctype.h>
int main(int argc, char *argv[])
{
//Variables
string key;
key = argv[1];
string plainText;
plainText = argv[2];
int i;
int k;
i = 0;
k = 0;
//Encrypt the string
for (i = 0; i < strlen(plainText); i++)
{
if (isalpha(plainText[i]))
{
if (islower(plainText[i]))
{
printf("%c",plainText[i] - 97 + key[k] % 26 + 97);
k++;
}
if (isupper(plainText[i]))
{
printf("%c",plainText[i] - 65 + key[k] % 26 + 65);
k++;
}
}
else
printf("%c",plainText[i]);
}
printf("\n");
}
最佳答案
如果key
数组的值应该表示循环移位值(aA
代表零移位,bB
- 移位1 等)那么编码表达式应如下所示
(plainText[i] - 97 + key[k] - 97) % 26 + 97
当然,在这种情况下,您还必须独立考虑 key[k]
字符的大小写(并减去 97
或 65
来自 key[k]
),此时您完全忽略它。
关于CS50 维吉尼亚密码给出错误的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25124920/