早教吧作业答案频道 -->其他-->
C语言霍夫曼编码本题要求各函数的参数使用指针假设字母a、b、c、d、e、f的霍夫曼编码分别是1、00、011、0100、01010、01011。那么字符串“abcdef”的编码显然就是字符串“10001101000101001011”。
题目详情
C 语言 霍夫曼编码
本题要求各函数的参数使用指针
假设字母a、b、c、d、e、f的霍夫曼编码分别是1、00、011、0100、01010、01011。那么字符串“abcdef”的编码显然就是字符串“10001101000101001011”。
(1)编写编码函数实现对字符串“abcdef”的编码,显示编码结果。
(2)编写译码函数对刚才得到的编码进行译码,显示译码结果。
(3)假设有一段编码“010111011010100100010010100”,请对其译码,并显示译码结果。
本题要求各函数的参数使用指针
假设字母a、b、c、d、e、f的霍夫曼编码分别是1、00、011、0100、01010、01011。那么字符串“abcdef”的编码显然就是字符串“10001101000101001011”。
(1)编写编码函数实现对字符串“abcdef”的编码,显示编码结果。
(2)编写译码函数对刚才得到的编码进行译码,显示译码结果。
(3)假设有一段编码“010111011010100100010010100”,请对其译码,并显示译码结果。
▼优质解答
答案和解析
#include <stdio.h>
#include <string.h>
/*
本题要求各函数的参数使用指针
假设字母a、b、c、d、e、f的霍夫曼编码分别是1、00、011、0100、01010、01011。那么字符串“abcdef”的编码显然就是字符串“10001101000101001011”。
(1)编写编码函数实现对字符串“abcdef”的编码,显示编码结果。
(2)编写译码函数对刚才得到的编码进行译码,显示译码结果。
(3)假设有一段编码“010111011010100100010010100”,请对其译码,并显示译码结果。
*/
char hufman[6][10] = {
{"a1"},
{"b00"},
{"c011"},
{"d0100"},
{"e01010"},
{"f01011"},
};
void code(char *src,char *dest)
{
int i;
int len = 0;
while(*src != '\0')
{
for(i=0;i<6;i++)
{
if(*src == hufman[i][0])
{
strcpy(dest + len,hufman[i]+1);
len += strlen(hufman[i]+1);
break;
}
}
src ++;
}
}
void decode(char *src,char *dest)
{
int i;
int len = 0;
while(*src != '\0')
{
for(i=0;i<6;i++)
{
if(strncmp(src,hufman[i]+1,strlen(hufman[i]+1)) == 0)
{
dest[len++] = hufman[i][0];
src += strlen(hufman[i]+1);
break;
}
}
}
dest[len] = 0;
}
int main(int argc,char *argv[])
{
char *str = "abcdef";
char *str1 = "010111011010100100010010100";
char res[100] = {0};
char decodeRes[20];
code(str,res);
printf("%s\n",res);
decode(res,decodeRes);
printf("%s\n",decodeRes);
decode(str1,decodeRes);
printf("%s\n",decodeRes);
}
看了C语言霍夫曼编码本题要求各函数...的网友还看了以下:
Vb6数组筛选Text1里面的数组为4码数组由字母和数字组合以空格符号分开例如:12341ABC2 2020-04-06 …
“步长”到底是什么意思,在一些用数字组成的编码、货号里面不是指计算机里的步长,是指一些由数字组成的 2020-04-06 …
36码的鞋长为23cm,41码的鞋长为25.5cm,某人鞋长为21.5cm.(码数y与鞋长x符合的 2020-05-15 …
浮点数包括()。A.阶符、阶码、数符、数码B.阶符、阶码、数符、符号C.阶码、数符、数码、符号D.阶 2020-05-23 …
数字0、2、4、6、8称为偶数数码,数字1、3、5、7、9称为奇数数码,在有些四位数的各位数字中, 2020-06-03 …
计算机字长为8位,求机器数E3H分别为原码,反码,补码,无符号数压缩BCD码所对应的真值 2020-07-01 …
这句话求详细的解释和例子.一个负数的补码数值加其原码的数值等于该数码对应的无符号数的模(基数) 2020-07-07 …
⑵阅读下面两则材料,概括出“二维码”相对于“一维码”的两个优势。材料一:类型一维码二维码数据容量大 2020-07-16 …
加试题在计算机内,有符号数有3种表示法:原码、反码和补码.(1)原码就是二进制定点表示法,即最高位 2020-07-31 …
关于计算机数制与码制的问题1.简述计算机中采用二进制的优点.2.简述计算机中利用补码表示有符号数的优 2020-11-17 …