一段由凯撒密码加密过的密文,凯撒密码指的是将字符偏移一定的单位,例如若偏移量为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;
}