求助一道C语言的编程题!

一个文本串可用事先给定的字母映射表进行加密。例如,设字母映射表为:abcdefghijklmnopqrstuvwxyzngzqtcobmuhelkpdawxfyivrsj... 一个文本串可用事先给定的字母映射表进行加密。例如,设字母映射表为:

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

n g z q t c o b m u h e l k p d a w x f y i v r s j

则字符串"encrypt"被加密为"tkzwsdf".试写一算法将输入的文本串进行加密后输出;另写一算法,将输入的已加密的文本串进行解密后输出

谢谢帮忙呀!
展开
 我来答
匿名用户
2008-03-14
展开全部
分析:先将顺序串的存储结构定义修改如下:
typedef struct{
char ch[2][MaxStrSize];
int length;
}SeqString;
不妨设ch的第0行存放原字母表,第1行存放映射表.具体算法如下:
(1)void Encoding(char *S,SeqString T){
//设串S中存放待加密的文本,T中存放字母表及映射表
int i,j;
int m=T.length; //字母表长
int n=strlen(S); //字符串长
for(i=0;i<n;i++){ //扫描文本串
for(j=0;i<m;j++) //扫描字母表
if(S[i]==T.ch[0][j]){
printf("%c",T.ch[1][j]); //加密输出
break; //跳出内循环
}
if(j==m)Error("%c is not in alphabet",s[i]);
}
}
(2)void DeCoding(char *S, SeqString T){ //S为待解密串
int i,j;
int m=T.length; //字母表长
int n=strlen(S); //字符串长
for(i=0;i<n;i++){ //扫描文本串
for(j=0;i<m;j++) //扫描字母表
if(S[i]==T.ch[1][j]){
printf("%c",T.ch[0][j]); //加密输出
break; //跳出内循环
}
if(j==m)Error("%c is not in alphabet",s[i]);
}
}
上述两算法的时间复杂度均为O(m*n).
ggdmdf
2008-03-14 · TA获得超过1520个赞
知道小有建树答主
回答量:1024
采纳率:0%
帮助的人:1224万
展开全部
不小心看到你的字符映射表是1对1的...
实现如下:

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

static char en[27] = "ngzqtcobmuhelkpdawxfyivrsj";//加密表,产生解密表时根据最后的0来判断,所以为27,下面为26
static char de[26];//解密表

// 根据已有加密映射表,产生解密映射表
void get_des() {
char *p = en;
do {
de[*p - 'a'] = 'a' + p - en;
} while (*++p != 0);
}
// 打印原字符串和加密后的字符串
void display_en_by_str(char *ptr) {
printf("%32s -> ", ptr);
while (*ptr != 0) {
putchar(en[*ptr++-'a']);
}
printf("\n");
}

int main()
{
char str[256];

get_des();
printf("en: %s\nde: %s\n", en, de);

printf("Input a string(exit to quit): " );
scanf("%s", str);
while (strcmp(str, "exit") != 0) {
display_en_by_str(str);
printf("Input a string(exit to quit): " );
scanf("%s", str);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友770fa52
2008-03-14 · TA获得超过265个赞
知道答主
回答量:145
采纳率:0%
帮助的人:0
展开全部
这个加密算法是最古典的加密算法,太旧了,去网络上荡个DES算法可能还行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
197077954
2008-03-14 · 超过12用户采纳过TA的回答
知道答主
回答量:66
采纳率:0%
帮助的人:0
展开全部
c++ primer有这个问题的解法(p317)
用map做的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lrb1983091
2008-03-14 · TA获得超过825个赞
知道小有建树答主
回答量:572
采纳率:0%
帮助的人:889万
展开全部
没反应过来^
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式