题目要求:
问题解析:
之前学习数据结构中的循环队列,对循环这个概念的理解就不是很深刻,我记得当时的插入位置是判定是否为满((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 <= 'Z' && t >= 'A')
{
t = (t - 'A' + 5) % 26 + 'A';//大写字母循环加密
putchar(t);
}
else if (t <= 'z' && t >= 'a')
{
t = (t - 'a' + 5) % 26 + 'a';//小写字母类似
putchar(t);
}
t = getchar();
}
return 0;
}
运行结果:文章来源:https://www.toymoban.com/news/detail-574195.html
文章来源地址https://www.toymoban.com/news/detail-574195.html
到了这里,关于每个字符向后移动x位的循环加密解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!