CS50 维吉尼亚密码给出错误的输出

标签 c cs50 vigenere

我正在通过 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] 字符的大小写(并减去 9765 来自 key[k]),此时您完全忽略它。

关于CS50 维吉尼亚密码给出错误的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25124920/

相关文章:

c - 在 C 中创建获取字符串函数时遇到问题

c - 哪种代码更简洁、设计更好?

C 分段故障函数引用

c - Vigenere Cipher - 无法解释的细微差别

Python 3 : Generate not all permutations, 但长度 r 的所有非重复组合?

python - 在 Python3 中使用 for 循环为 vigenere 密码创建 2D 列表

python - 结构定义中带有指针的枚举

c - 在这种情况下,您将如何避免错误共享?

c - 我应该重用变量吗?

objective-c - 为什么不需要取消引用 NSString 指针?