C高手来帮忙啊,关于恺撒位移!!!

来源:百度知道 编辑:UC知道 时间:2024/06/07 19:46:37
#include <stdio.h>
#include <string.h>
void main()
{

int n2;

char s1[100];

printf("input this program encodes a message using a cyclic cipher.\n");
printf("Encode a message:");
gets(s1);
printf("enter the numeric key:");
scanf("%d",&n2);

for(unsigned i=0;i<strlen(s1);i++)

if((s1[i]>='a'&&s1[i]<='z')||(s1[i]>='A'&&s1[i]<='Z'))
{
s1[i]=s1[i]+n2;
if(s1[i]>'Z'&&s1[i]<='Z'+n2||s1[i]>'z') s1[i]=s1[i]-26;
}

printf("encodeed message: %s\n",s1);

}
上面是可以正的位移!
我想达到的目的就是输入a~z 位移2位后输出是c~b
输入a~z 位移-2位后输出是y~x
请高手帮忙改程序~谢谢!
正确是正确~但是和我上面答案没什么区别啊~还是不能右移位啊!!位移数一旦是负的就出现乱吗啦~~~!!!我要正负皆可的!!

VC测试通过!

修改后的代码为:
#include <stdio.h>
#include <string.h>
void main()
{
int n2;
char s1[100];

printf("input this program encodes a message using a cyclic cipher.\n");
printf("Encode a message:");
gets(s1);
printf("enter the numeric key:");
scanf("%d",&n2);
while(n2<0)
{//如果是负数,先把转为正数,就能达到正负都可以了
n2+=26;
}
for(unsigned i=0;i<strlen(s1);i++)
if(s1[i]>='a'&&s1[i]<='z')
{
s1[i]=(s1[i]-'a'+n2)%26+'a';
}
else if(s1[i]>='A'&&s1[i]<='Z')
{
s1[i]=(s1[i]-'A'+n2)%26+'A';
}
printf("encodeed message: %s\n",s1);
}