凯撒密码不适用于空格

标签 c encryption cs50 caesar-cipher

我很难让空间正确显示。以下是打印内容的输出:

./CaeserC 13[A
Encrypt message by 13[A spaces
Please insert your message:
Hello World 
Your message is: Hello World
Your encrypted message is:Uryybadbeyq

It needs to be Uryyb Jbeyq

#include <cs50.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>

int main (int argc, string argv[])
{
    string kinp = argv[1];
    int k = atoi(argv[1]);
    printf("Encrypt message by %s spaces\n", kinp);
    printf("Please insert your message:\n");
    string p = GetString();
    int lettern;
    printf("Your message is: %s\n", p);
    printf("Your encrypted message is:");
    for (int i=0, n=strlen(p); i<n; i++)
        {  
            lettern=p[i];
            //printf("%i \n", lettern);
        }
    if (lettern==32)
    {
        printf("%c", ' ');
    }
    if (lettern>= 65 && lettern<=90)
    {
    for (int i=0, n=strlen(p); i<n; i++)
        {  
            printf("%c", ((p[i]+k-65)%26)+65);
        }
    }
    if (lettern>= 97 && lettern<=122)
    {
        for (int i=0, n=strlen(p); i<n; i++)
        {
            printf("%c", ((p[i]+k-97)%26)+97);
        }
    }

    printf("\n");
}

最佳答案

printf("Your encrypted message is:");
for (int i=0; p[i]; i++){
    if(isupper(p[i]))
        putchar((p[i]+k-'A')%26 +'A');
    else if(islower(p[i]))
        putchar((p[i]+k-'a')%26 +'a');
    else
        putchar(p[i]);
}

关于凯撒密码不适用于空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26685593/

相关文章:

c - 如何使用 C 从 Windows 中的文件句柄获取文件名?

c - 穷人序列号生成方案,第2部分

c++ - 如何将ASCII文本文件合并,然后加密,再解密,放到一个 'File'的Class中? C++

c - 为什么我通过打印只有 17 个字节的数组内容而得到此输出?

c - Vigenere 问题集中的非字母问题

c - 维吉尼亚密码逻辑错误

c - 参数中的指针出现问题..c 中的冒泡排序

c - 如何在 Windows 上交叉编译 C 代码以使二进制文件也能在 Unix (Solaris/HPUX/Linux) 上运行?

c++ - 为什么 NMake 生成器将 C 文件的 .obj 文件放在 C++ 目录以外的目录中

ios使用des ecb解密base64编码的字符串