C语言之密码

欢迎进入我的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;
} 

本题感悟

本块内容可能来自课本或其他网站,若涉及侵权问题,请联系我进行删除,谢谢大家啦~

这题的思想还是挺有意思的,要记住了。
以上。

猜你喜欢

转载自blog.csdn.net/hongguoya/article/details/105623599