这是用于 cs50 的 Vigenere 密码。这是我第一次编码,我现在要绕这个一周了,我似乎无法在循环第一次完成后打印第一个字母。
例如:
jharvard@appliance (~/Dropbox): ./viginere abcde 你是关键是 abcde 输入您的文字: 啊啊啊啊啊啊啊啊啊啊 abcde bcde bcdebc debcde
首先a
是打印,然后它开始,b
最后它不会打印每个字母。密钥由用户选择。
我不知道我做错了什么。
for (int i = 0, j = strlen(plain_text), l = 0; i < j; i++)
{
int rotation_1 = (tolower(plain_text[i]) + (key[l] - 97)) % 122;
int rotation_2 = (plain_text[i] + (key[l] - 97)) % 122;
//if it is a letter
if (isalpha(plain_text[i]))
{
l = l % strlen(key);
//if the it is uppercase
if (isupper(plain_text[i]))
{
printf("%c", toupper(rotation_1));
}
//else if it is lowercase
else
{
printf("%c", rotation_2);
}
l++;
}
// if it is not a letter we print it as it is
else
{
printf("%c", plain_text[i]);
}
}