每个字符向后移动x位的循环加密解析
2023-09-27 14:22:48 时间
题目要求:
问题解析:
之前学习数据结构中的循环队列,对循环这个概念的理解就不是很深刻,我记得当时的插入位置是判定是否为满((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;
}
运行结果:
相关文章
- Python 图片转字符图
- Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小demo mysql循环插入数据、生成随机数及CONCAT函数 .NET记录-获取外网IP以及判断该IP是属于网通还是电信 Guid的生成和数据修整(去除空格和小写字符)
- 【BZOJ4566】找相同字符(后缀自动机)
- SQL Server中的Replicate函数。循环字符次数,可用于多层分类
- MySQL中 replace 替换字符
- 使用Opencv进行轮廓检测,字符提取,简单的直方图字符识别!
- SwiftUI TextField高级用法之限制文本TextField视图中的字符数
- [LeetCode]1374. 生成每种字符都是奇数个的字符串
- 《C语言解惑》—— 2.7 别混淆字符数组和字符
- [LeetCode] 3. Longest Substring Without Repeating Characters 最长无重复字符的子串
- 分组正则替换字符串中特定字符