45567 2022-05-12 14:47 采纳率: 66.7%
浏览 68
已结题

请问谁能看下这个问题

密码学中,凯撒密码(Caesar Cipher)是一种最简单的加密技术 其核心思想是替换加密。即将输入的字母根据字母表上的顺序 向前或向后偏移固定的数目,形成密文。如:向后偏移2位 则 A 变成 C(相当于 'A'+2)。进一步扩展,可以将字母表中的 A-Z a-z 0-9 扩展为大循环 形成 A B ~ Z a b ~ z 0 1 ~ 9 A B ~ Z为基础的链,用以进行映射。

修改为支持整串文字加密的“凯撒加密”
1)定义字符数组 char input[N] 保存输入的文字

2)定义字符数组 char output[N] 保存转换后的文字

3)使用scanf或getchar循环获取输入的整串文字,并保存在 input 数组

4)执行凯撒加密

5)输出字符保存在 output 数组

6)整行打印转意后的字符

例如:

input pos num(-5<pos<5): 3

input string: Hello the world!

output string:Khoor wkh zruog!

  • 写回答

4条回答 默认 最新

  • 丨秋水丨 2022-05-12 15:41
    关注

    img

    #include<stdio.h>
    #include<string.h>
    // 字符串缓冲区大小
    #define N 1024
    // 声明凯撒加密函数
    void caesar_cipher(char input[N], int offset, char output[N]);
    int main()
    {
        // 1)定义字符数组 char input[N] 保存输入的文字
        int offset;
        char input[N] = { 0 };
        // 2)定义字符数组 char output[N] 保存转换后的文字
        char output[N] = { 0 };
        // 3)使用gets获取输入的整串文字,并保存在 input 数组
        printf("input pos num(-5<pos<5): ");
        scanf("%d", &offset);
        printf("input string: ");
        gets(input); // 跳过回车
        gets(input);
        // 4)执行凯撒加密 并且 5)将输出字符保存在output数组
        caesar_cipher(input, offset, output);
        // 6)整行打印转意后的字符
        printf("output string:%s ", output);
    }
    
    void caesar_cipher(char input[N], int offset, char output[N])
    {
        const char* table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
        while (*input)
        {
            int cnt = 0;
            const char* tmp = table;
            while (*tmp && *tmp != *input)
            {
                ++cnt;
                ++tmp;
            }
            char ch = *tmp != *input ? *input : table[(cnt + offset + (int)strlen(table)) % (int)strlen(table)];
            *output = ch;
            ++input;
            ++output;
        }
        *output = 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月21日
  • 已采纳回答 5月13日
  • 创建了问题 5月12日

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c