每个字符向后移动x位的循环加密解析
•
算法结构
题目要求:

问题解析:
之前学习数据结构中的循环队列,对循环这个概念的理解就不是很深刻,我记得当时的插入位置是判定是否为满((rear+1)%capacity==front)之后,index = (rear+1)%capacity 这样操作的; %这一下防止数组越界的操作,很巧妙的能把rear指针搬回数组开头!

这里的rear+1 表示我们放数据的逻辑是在队尾rear有效数据挨着的后面一个位置放,连续的放,上面的字符加密可能一次跳好几个单位!
上面这道题既然要循环,肯定就是类似的溢出%操作的逻辑,但是他是在ascii码对应的字符区间,下标并不是简单地0~capacity-1的数组区间映射了;
一次跳5个单位,并且capacity == 26,那么可以理解为:
i加密 = (s[i]-‘A’+5)%capacity+‘A’;
(上面循环队列为啥没有-‘A’和后面的+‘A’是因为他的index偏移反问就是0~capacity-1这个范围,所以不用处理,我们这个字符加密,他的范围有个偏移量,是’A’~‘Z’…,他的开头相当于是’A’这个字符ascii码,我们每次处理先把偏移位置-‘A’到0,再%capacity类似于循环队列的简单计算方式处理完index偏移位置之后,最终加回来这个起始偏移量’A’即可)
题目代码:
int main(void)
{
char t;
printf("请输入若干字符,以回车结束:");
t = getchar();
printf("密文为:");
while (t != '\n')
{
if (t = 'A')
{
t = (t - 'A' + 5) % 26 + 'A';//大写字母循环加密
putchar(t);
}
else if (t = 'a')
{
t = (t - 'a' + 5) % 26 + 'a';//小写字母类似
putchar(t);
}
t = getchar();
}
return 0;
}
运行结果:

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://www.net2asp.com/25cc0a4e0d.html
