欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mapping Cipher

程序员文章站 2022-07-15 13:12:52
...
题目: 输入字母表中所映射的密文, 再将你输入的原文按照对应的密文所转换后输出。(加密)

        Mapping Cipher
You are given an alphabetic mapping table to create cipher text. The table is defined
by a string using 26 lower-case alphabets, such as
incpfvztsmbexowhlgkqjyrdau
In the string all characters are different. Using this table to generate cipher text, it
performs the following mapping scheme:
a -> i, A->I
b -> n, B->N
c -> c, C->C
d -> p, D->P
. . . . . . .
y -> a, Y->A
z -> u, Z->U
Any non-alphabetic character are kept unchanged.
Apply the scheme to plain text:
There are 2 dogs and 3 cats.
It rains dogs & cats!
Obtain the following cipher text:
Qtfgf igf 2 pwzk iop 3 ciqk.
Sq gisok pwzk & ciqk!

Input
There are several test cases. Each test case starts with a line of mapping string
described above. Following are plain text enclosed by two lines of string "***".
Your task is to output the cypher text encrypted using the given mapping string. There
is a blank line after each case. Finally, you will reach a line of string "###" which
signals the end of test. Each line in the test case is no more than 1000 characters. Each
line in test cases is no more than 1000 characters.

Output
The cipher text of each test case is prefixed with a cipher text number as shown in the
sample output. Place a blank line between cases.

Sample Input
incpfvztsmbexowhlgkqjyrdau
***
There are 2 dogs and 3 cats.
It rains dogs & cats!
***
xowhlgkqjyrdauincpfvztsmbe
***
There are 2 dogs and 3 cats.
It rains dogs & cats!
***
###

Sample Output
Cypher 1:
Qtfgf igf 2 pwzk iop 3 ciqk.
Sq gisok pwzk & ciqk!
Cypher 2:
Vqlpl xpl 2 hikf xuh 3 wxvf.
Jv pxjuf hikf & wxvf!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
	int flag=1, test=1;
	
	while(1)
	{
		char arr[26]={0}; //存取字母映射的密文
		char z[10]={0}; //存取密文后的***
		char str[1001]={0}; //存取输入的原文
		
		gets(arr);
		if(arr[0]=='#' && arr[1]=='#' && arr[2]=='#') break;
		
		gets(z);
		
		if(flag) flag=0;
		else printf("\n");
		
		printf("Cypher %d:\n",test++);
		
		while(gets(str))
		{
			if(str[0]=='*' && str[1]=='*' && str[2]=='*') break;
			
			for(int i=0; i<strlen(str); i++)
			{
				if(str[i]>='a' && str[i]<='z') printf("%c",arr[str[i]-'a']);
				else if(str[i]>='A' && str[i]<='Z') printf("%c",arr[str[i]-'A']+'A'-'a');
				else printf("%c",str[i]);
			}
			
			printf("\n");
		}
		
		scanf("\n");
			
	}
    
    return 0;
}



上一篇: inheritance mapping

下一篇: Local Mapping