在C(保持空间)中的书面Vigenere密码

问题描述 投票:0回答:1

我正在尝试在其中保留空格的地方写Vigenere密码。因此,如果给我一个简单的消息,如“你好,你好吗”,则密码的格式为“ abcde fgh ijk lmn”,我所要保留的是空格。我已经为此工作了一段时间。任何帮助,将不胜感激。

这是我的代码

void CipherText(char* plainText, char* cipherKey)
{
    int keyLength = strlen(cipherKey);
    char cipherText;

    for(int i = 0; i < strlen(plainText); i++)
    {

        int cipherText = (unsigned char)plainText[i];

        cipherText = ((int)plainText[i]-97+(int)tolower(cipherKey[i])-97)%26 + 'A';

        putchar(cipherText);
    }
    putchar('\n');
}
c cs50 vigenere
1个回答
0
投票

[在尝试转换(编码)字符之前,先测试该字符是否为字母。另外,请勿在字符代码中使用数字-例如,使用'a'而不是97。我删除了一些不必要的强制转换。我还使用了cipherText而不是(int)plainText[i],因为这样可以避免不必要的符号扩展。我还添加了一些空格;明智地使用空格时,更容易阅读代码。

void CipherText(char* plainText, char* cipherKey)
{
    int keyLength = strlen(cipherKey);
    char cipherText;

    for(int i = 0; i < strlen(plainText); i++)
    {
        int cipherText = (unsigned char)plainText[i];
        if (isalpha(cipherText))
            cipherText = (cipherText - 'a' + tolower(cipherKey[i]) - 'a') % 26 + 'A';
        putchar(cipherText);
    }
    putchar('\n');
}
© www.soinside.com 2019 - 2024. All rights reserved.