这段代码是一个简单的凯撒密码加密程序,它将输入的字符串中的每个字母向左或向右偏移一定的距离,以实现加密的目的。在这段代码中,如果偏移量offset为正数,则将每个字母向右偏移offset个位置;如果偏移量offset为负数,则将每个字母向左偏移offset个位置。
注释:针对(3)不可将offset赋值为相反数,这样只会使第一个字母向左偏移,第二个字母会成为正数进入if中向右偏移
(1)#include <stdio.h>
//凯撒加密向后偏移
#define MAXN 80
#define M 26
int main()
{
int i=0,offset;
char str[MAXN];
printf("Enetr string:");
while((str[i]=getchar())!='\n'){
i++;
}
str[i]='\0';
printf("Enter offset:");
scanf("%d",&offset);
if(offset>=M){
offset%=M;
}
for(i=0;str[i]!='\0';i++){
if(str[i]>='A' && str[i]<='Z'){
if(str[i]-'A'+offset>=M){
str[i]=str[i]-(M-offset);
}
else{
str[i]+=offset;
}
}
else if(str[i]>='a' && str[i]<='z'){
if(str[i]-'a'+offset>=M){
str[i]=str[i]-(M-offset);
}
else{
str[i]+=offset;
}
}
}printf("After result:");
for(i=0;str[i]!='\0';i++){
putchar(str[i]);
}
printf("\n");
return 0;
}
(2)//凯撒密码向前偏移
#include <stdio.h>
#define MAXN 80
#define M 26
int main()
{
int i=0,offset;
char str[MAXN];
printf("Enetr string:");
while((str[i]=getchar())!='\n'){
i++;
}
str[i]='\0';
printf("Enter offset:");
scanf("%d",&offset);
if(offset>=M){
offset%=M;
}
for(i=0;str[i]!='\0';i++){
if(str[i]>='A' && str[i]<='Z'){
if(str[i]-'A'-offset<=0){
str[i]=str[i]+M-offset;
}
else{
str[i]-=offset;
}
}
else if(str[i]>='a' && str[i]<='z'){
if(str[i]-'a'-offset<=0){
str[i]=str[i]+M-offset;
}
else{
str[i]-=offset;
}
}
}printf("After result:");
for(i=0;str[i]!='\0';i++){
putchar(str[i]);
}
printf("\n");
return 0;
}
(3)
//使用凯撒密码进行向右偏移或者向左偏移
#include<stdio.h>
#define MAXN 80
#define M 26
#include <math.h>
int main()
{
int i=0,offset;
char str[MAXN];
printf("Enetr string:");
while((str[i]=getchar())!='\n'){
i++;
}
str[i]='\0';
printf("Enter offset:");
scanf("%d",&offset);
if(fabs(offset)>=M){
offset%=M;
}
for(i=0;str[i]!='\0';i++){
if(offset>=0){
if(str[i]>='A' && str[i]<='Z'){
if(str[i]-'A'+offset>=M){
str[i]=str[i]-(M-offset);
}
else{
str[i]+=offset;
}
}
else if(str[i]>='a' && str[i]<='z'){
if(str[i]-'a'+offset>=M){
str[i]=str[i]-(M-offset);
}
else{
str[i]+=offset;
}
}
}
else{
if(str[i]>='A' && str[i]<='Z'){
if(str[i]-'A'-fabs(offset)<=0){
str[i]=str[i]+M-fabs(offset);
}
else{
str[i]-=fabs(offset);
}
}
else if(str[i]>='a' && str[i]<='z'){
if(str[i]-'a'-fabs(offset)<=0){
str[i]=str[i]+M-fabs(offset);
}
else{
str[i]-=fabs(offset);
}
}
}
}printf("After result:");
for(i=0;str[i]!='\0';i++){
putchar(str[i]);
}
printf("\n");
return 0;
}