密码
欢迎进入我的C语言世界
题目
Problem Description
密码的使用最早可以追溯到古罗马时期,《高卢战记》有描述恺撒曾经使用密码来传递信息,即所谓的“恺撒密码”,它是一种替代密码,通过将字母按顺序推后3位起到加密作用,如将字母A换作字母D,将字母B换作字母E。据说恺撒是率先使用加密的古代将领之一,因此这种加密方法被称为恺撒密码。显然从1到25个位置的移位我们都可以使用, 因此,为了使密码有更高的安全性,我们可以使用单字母替换密码。 如:
明码表 ABCDEFGHIJKLMNOPQRSTUVWXYZ
密码表 QWERTYUIOPASDFGHJKLZXCVBNM
明文 Welcome to fzupc2007!
密文 Vtsegdt zg Ymxhe2007!
明文中的字母按明码表和密码表被替换成相应的密文字母。
请编写一个程序在已知密码表(明码表不变)和明文的情况下加密后的密文。加密只针对英文字母,所有其他的符号都保持不变。
Input
本题有多组输入数据,你必须处理到EOF为止
每组输入数据有2行,第一行为密码表共有26个英文大写字符,第二行为密文,密文不超过100个字符。输入数据由字母、空格、数字以及各种标点组成。
Output
输出只有一行为加密后的明文(大小写字母加密方式相同,且替换后大小写方式不变)。
Sample Input
QWERTYUIOPASDFGHJKLZXCVBNM
Welcome to Fzupc2007!
Sample Output
Vtsegdt zg Ymxhe2007!
答案
下面展示 实现代码
。
#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char mm[26];//密码表
while(scanf("%s",mm) != EOF)
{
getchar();
char mingw[100];//明文
gets(mingw);
int l = strlen(mingw);
int i = 0;
for(i = 0; i < l; i++)
{
if(mingw[i] >= 'a' && mingw[i] <= 'z')
{
mingw[i] = mm[mingw[i] - 'a'] + 32;//将对应明文减去字符a,即可找到其在明码表中所排位置,再将其对应至密码表
//密码表中只有大写,所以将对应的密码转换成小写
//密文和明文是一一对应的,除了字母以外都是一样的,所以在明文上直接进行修改
}
else if(mingw[i] >= 'A' && mingw[i] <= 'Z')
{
mingw[i] = mm[mingw[i] - 'A'];//将对应明文减去字符A,即可找到其在明码表中所排位置,再将其对应至密码表
}
}
puts(mingw);
}
return 0;
}
本题感悟
本块内容可能来自课本或其他网站,若涉及侵权问题,请联系我进行删除,谢谢大家啦~
这题的思想还是挺有意思的,要记住了。
以上。