关键词加密

Description

有一种加密技术是这样实现的,假如关键词为“magicnet”,则字母表的描述形式如下: 
a b c d e f g h i j k l m n o p q r s t u v w x y z 

m a g i c n e t b d f h j k l o p q r s u v w x y z 
则如果有一明文为:help 则密文为:tcho 。 
如果关键词中有重复的字母,则只取第一次出现的位置,例如“success”,则视为“suce”。 
你的任务是,给你一个关键词和一段明文,让你加密。

Input

输入包括多组数据。每组输入为一行,为字符串A、字符串B。字符串A的长度不大于26,字符串B的长度不大于256,且字符串A、B全为小写字母。 
以文件结束符结束输入。

Output

每组数据输出一行。

Sample Input

magicnet help

Sample Output

tcho

Source

第六届校赛

#include <stdio.h>
#include <string.h>
int main()
{
int i,j,k,length,flag;
char org[26],pair[26],pair2[26],point[26],point2[26],code[256];
for(i=0;i<26;i++)
{
pair[i]=97+i;
org[i]=97+i;
}
printf("the orignal data:\n");
for(i=0;i<26;i++)
{ printf("%c ",org[i]);} //原始的字母表 a b c d e f g h i j k l m n o p q r s t u v w x y z 
printf("\n");
printf("input the point vacabulary:");
scanf("%s",point);
length=strlen(point);
for(i=0,k=0;i<length;i++)
{
flag=1;
for(j=0;j<i;j++)
{if(point[i]==point[j])flag=0;}
if(flag)
{
point2[k]=point[i];
k++;
}
}
point2[k]='\0';
printf("the operated point2 data:%s\n",point2); //去掉重复字母后的关键词
length=strlen(point2);
for(i=0;i<26;i++)
{
for(j=0;j<length;j++)
{if(pair[i]==point2[j])
pair[i]='#';}
} //先令pair为顺序字母表,将其中与关键词相同的字母标记为‘#’字符
for(i=0,j=0;i<26;i++)
{
if(pair[i]!='#')
{pair2[j]=pair[i];j++;}
} //将pair中非‘#’的字符顺序赋值给pair2字符数组
for(i=25;i>=0;i--)
pair2[i]=pair2[i-length]; //将pair2中的字符向右移动去重关键词的长度,得到完整的pair2即为与org对比的字符数组
for(i=0;i<length;i++)
pair2[i]=point2[i];
for(i=0;i<26;i++)
printf("%c ",pair2[i]);
printf("\n");
scanf("%s",code); //输入明文
length=strlen(code);
for(i=0;i<length;i++)
{
for(j=0;j<26;j++)
{
if(code[i]==org[j])
{code[i]=pair2[j];
break;}
}
} //将明文中的字母在org中找出与之对应的下标,根据该下标在pair2中找出相应的密文字符
for(i=0;i<length;i++)
{printf("%c",code[i]);} //将密文输出 ,程序完成
return 0;
}
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值