0
点赞
收藏
分享

微信扫一扫

凯撒密码,可输入任意长度字符串进行转换

迪莉娅1979 2022-04-20 阅读 52
c++

目录

简介:

题目要求:

代码段:

上机演示:


简介:

给定任意数值偏移,将字母表中的A~Za~z0~9扩展为大循环,形成AB~Zab~z01~9AB~Z..为基础的链,用以进行映射,形成密文。

题目要求:

  1. 屏幕打印输出提示:输入偏移(允许负数)。

  2. 获得输入偏移。

  3. 屏幕打印输出提示:输入字符(允许大写字母、小写字母、数字、","、".")。

  4. 如果输入的不符合要求字符,提示并重新要求输入。

  5. 根据凯撒加密原理,将输入的字符映射为密文(“.”和“,”不变),打印输出。

  6. 要求循环输入,直到输入自定义的特殊符号为正(如遇到“\”为正)。

代码段:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
FILE* fp;
char a[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
int b,i,j=0;
char d;
char f;
void xieru(char e,int g)
{
    fp=fopen("kk.txt","a");
    fputc(e,fp);
    fclose( fp );
}
void duchu()
{
    fp=fopen("kk.txt","r");
    while((f=fgetc(fp))!=EOF)
    {
    printf("%c",f);
    }
    fclose( fp );
}
int main()
{
fp=fopen("kk.txt","w");
fclose( fp );
printf("\n请输入偏移:");
scanf("%d",&b);
while(1)
{
printf("请输入字符:");
scanf(" %c",&d);
j++;
for(i=0;i<63;i++)
{
    if(a[i]==d)
    {
    i=i+b;
    if(i<0){for(;i<0;i+=62);}
    if(i>=62){for(;i>=62;i-=62);}
    d=a[i];
    xieru(d,j);
    break;
    }
}
    if(i==63)
    {
    switch(d)
    {
    case ',':xieru(',',j);continue;
    case '.':xieru('.',j);continue;
    case '\\':printf("结束输入\n");j--;break;
    default:printf("输入错误");j--;continue;
    }
    }
    else continue;
    break;
}
duchu();
return 0;
}

上机演示:

 

举报

相关推荐

0 条评论