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

目录

简介:

题目要求:

代码段:

上机演示:


简介:

给定任意数值偏移,将字母表中的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;
}

上机演示:

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值