C语言 7-4 凯撒密码

        为了防止信息被别人轻易窃取,需要把电码明文通过加密方式变换成为密文。输入一个以回车符为结束标志的字符串(少于80个字符),再输入一个负整数offset,用凯撒密码将其加密后输出。凯撒密码是一种简单的替换加密技术,当偏移量是负数时,将明文中的所有字母都在字母表上向前偏移offset位后被替换成密文。
        例如,当偏移量offset是-2时,表示所有的字母被向前移动 2 位后的字母替换,即所有的字母 Z 将被替换成X,字母 Y 将变为 W,…,字母 C 变成 A,字母 B 则变为 Z,字母 A 变为 Y。

输入格式:

输入第一行给出一个以回车结束的非空字符串(少于80个字符);第二行输入一个负整数offset。

输出格式:

输出加密后的结果字符串。
如果输入的offset不在有效范围内,则在一行出"Invalid."。

输入样例1:

Hello Hangzhou
-2

输出样例1:

Fcjjm Fylexfms

输入样例2:

在这里给出一组输入。例如:

z=x+y
1

输出样例2:

Invalid.

 

思路:遍历字符数组的每一个元素,输出按规则对应的字符。

易错点:①“a”前移两位后输出应为‘y’

#include<stdio.h>
int main()
{
	char a [81];
	int offset;
	int n;
	gets(a);
	if(scanf("-%d",&n))//读入需要前移的位数。 
					   // 注意:如果读入的数据格式为"-%d",即读入了一个负整数,scanf函数返回1,条件为真,执行if 
					   //如果读入的数据格式与"-%d"不符,scanf函数返回0,条件为假,执行else 
	{
		offset=n%26;//当n取值大于26时,说明前移进入下一个周期,则前移n%26位数 
		int i;
		for(i=0;a[i]!='\0';i++)//遍历字符数组内的每一个有效元素 ,并进行修正输出 
		{
			if(a[i]>='a'&&a[i]<='z')//小写  
			{
				if(a[i]-offset<'a')//先判断前移后出现越界的情况 
				{
					printf("%c",a[i]-offset+26);
				}
				else //前移后不越界的情况 
				{
					printf("%c",a[i]-offset);
				}
			}
			else if(a[i]>='A'&&a[i]<='Z')//大写 
			{
				if(a[i]-offset<'A')
				{
					printf("%c",a[i]-offset+26);//先判断前移后出现越界的情况 
				}
				else
				{
					printf("%c",a[i]-offset); //前移后不越界的情况 
				}
			}
			else//如果该元素不是字母,则不需要迁移,原样输出 
			{
				printf("%c",a[i]);
			}
		}
	}
	else
	{
		printf("Invalid.\n");
	}
	return 0;
}

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值