首页 > 试题广场 >

凯撒密码

[编程题]凯撒密码
  • 热度指数:710 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
一段由凯撒密码加密过的密文,凯撒密码指的是将字符偏移一定的单位,例如若偏移量为2,则a替换为c,b替换为d,c替换为e,...,z替换为b。若加密nowcoder,则密文为pqyeqfgt。现在发现加密包括数字、大写字母、小写字母,即0-9、A-Z、a-z的排列顺序进行偏移,现在截获了对方的一段密文以及偏移量,给定一段密文str和偏移量d,求对应的明文。

示例1

输入

"pqyeqfgt",2

输出

"nowcoder"
示例2

输入

"123ABCabc",3

输出

"yz0789XYZ"

备注:
,d为加密时的偏移量
char* decode(char* str, int d ) {
  // code == 密码本
  const char* code = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
  char* ans = (char*) calloc(1001, sizeof(char));
  int index;
  while (*str) {
    index = strchr(code, *str) - code;
    strncat(ans, index - d < 0 
            ? code + (62 + (index - d)) 
            : code + (index - d), 1);
    ++str;
  }
  return ans;
}

发表于 2021-07-30 08:45:52 回复(0)