恺撒密码是一种简单的替换加密技术,将明文中的所有字母都在字母表上偏移offset位后被替换成密文,当offset大于零时,表示向后偏移;当offset小于零时,表示向前偏移。为防止信息窃取,需要把电文加密后变成密文。输入一个以回车符为结束标志的字符串(少于80个字符),再输入一个整数offset,调用函数fun()后用凯撒密码将其加密后输出。
函数接口定义:
void fun ( char *Pstr, const int n );
其中 Pstr
和 n
都是用户传入的参数。 Pstr
指向要加密的字符串; n
的范围不超过整数。
裁判测试程序样例:
#include <stdio.h>
void fun(char *Pstr, const int n );
int main(){
char Str[80]={0};
int offset;
gets(Str);
scanf("%d",&n);
fun(Str,offset);
puts(Str);
return 0;
}
/* 请在这里填写答案 */
代码实现
void fun ( char *Pstr, const int n )
{
int m = n%26;//判断m移动多远
for(int i=0;Pstr[i]!='\0';i++) {
if(Pstr[i]>='a'&&Pstr[i]<='z') {
if(m>=0) {
Pstr[i] = ((Pstr[i]-'a')+m)%26 +'a';
}else{
Pstr[i] = ((Pstr[i]-'a')+m+26)%26 +'a';//极端想象a左移是要变成以z往左移
}
}else if(Pstr[i]>='A'&&Pstr[i]<='Z'){
if(m>=0) {
Pstr[i] = ((Pstr[i]-'A')+m)%26 +'A';
} else {
Pstr[i] = ((Pstr[i]-'A')+m+26)%26 +'A';
}
}
}
}