高老师最近想开发一款聊天软件,但他遇到了一个棘手的问题,他想将聊天消息加密后再发送。 加密方法如下:
创建双字符(假设全部为可见字符,不包含空格)对单字符映射的密码表,比如 “ac”->‘a’,“bc”->‘c’,“ff”->‘z’,“x+”->‘9’。并保证映射均为一一对应,不会出现 “ac”->‘a’,“bc”->‘a’ 或者 “ac”->‘a’,“ac”->‘c’这种情况。按照加密表将消息源码的每个字符加密为双字符,现需要你来实现此消息加密器。
输入
输入包含一组用例
用例第一行包含两个整数 m 和 n,其中 m代表密码表的条数,n 代表需要加密的消息条数, m 和 n 均不大于 100。
第 2 行开始至第 m + 1 行,每行为 ** * 形式的密码表。
第 m + 2 行至第 m+n+1 行,每行为需要加密的聊天消息,聊天消息不长于100 个字符。
输出
输出 n 行加密后的消息。
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
| 以文本方式显示
| 1秒 | 1024KB | 0 |
#include<cstdio>
#include<cstring>
int main()
{
int m = 0, n = 0;
char str[105][105] = { '\0' }, st[6] = { '\0' };
int str_num[200][2] = { -1 };
scanf("%d %d", &m, &n);
getchar();
for (int i = 0; i < m; i++)
{
scanf("%c%c%c%c%c", &st[0], &st[1], &st[2], &st[3], &st[4]);
int st1 = st[0];
int st2 = st[1];
int st3 = st[3];
str_num[st3][0] = st1;
str_num[st3][1] = st2;
}
for (int i = 0; i < n; i++)
scanf("%s", str[i]);
for (int i = 0; i < n; i++)
{
for (int j = 0;; j++)
{
if (str[i][j] == '\0')
break;
else
{
int s = str[i][j];
if (str_num[s][0] == -1)
printf("%c", str[i][j]);
else
printf("%c%c",str_num[s][0],str_num[s][1] );
}
}
printf("\n");
}
return 0;
}