一段由凯撒密码加密过的密文,凯撒密码指的是将字符偏移一定的单位,例如若偏移量为2,则a替换为c,b替换为d,c替换为e,...,z替换为b。若加密nowcoder,则密文为pqyeqfgt。现在发现加密包括数字、大写字母、小写字母,即0-9、A-Z、a-z的排列顺序进行偏移,现在截获了对方的一段密文以及偏移量,给定一段密文str和偏移量d,求对应的明文。
"pqyeqfgt",2
"nowcoder"
"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; }