69,373
社区成员
发帖
与我相关
我的任务
分享
# include <stdio.h>
# include <string.h>
main()
{
int i,k,j=0,w,r;
char bian[30]={'1','1','0','1','1','1','1','0','0','1','1','0','1','1','1','1','0','0'};
char a[3]={'1','1','0'};/*a的霍夫曼编码*/
char b[3]={'1','1','1'};/*b的霍夫曼编码*/
char c[3]={'1','0'};/*c的霍夫曼编码*/
char d[3]={'0'};/*d的霍夫曼编码*/
char temp[3],shou[8];
r=strlen(bian);
for(i=0;i<r;)/*外层循环用于控制解码进度*/
{
for(k=0;k<3;k++)/*里层用于具体解析每个字符编码*/
{
w=i+k;
temp[k]=bian[w];
if(temp[3]==a[3])/*判断编码是否为a*/
{
shou[j]='a';/*shou数组用于存储解析出来的字符*/
j++;
i=i+k+1;
break;/*如果解析成功就跳出里层循环,继续解析下一个编码*/
}
else if(temp[3]==b[3])/*判断编码是否为b*/
{
shou[j]='b';
j++;
i=i+k+1;
break;
}
else if(temp[3]==c[3])/*判断编码是否为c*/
{
shou[j]='c';
j++;
i=i+k+1;
break;
}
else if(temp[3]==d[3])/*判断编码是否为d*/
{
shou[j]='d';
j++;
i=i+k+1;
break;
}
else
continue;/*如果都不是就再取出一个编码,再与abcd的字符编码相比*/
}
}
for(i=0;i<8;i++)
printf("%c",shou[i]);
}
# include <stdio.h>
# include <string.h>
# include <conio.h>
main()
{
int i,k,j=0,w,r;
char bian[30]={'1','1','0','1','1','1','1','0','0','1','1','0','1','1','1','1','0','0'};
char a[3]={'1','1','0'};/*a的霍夫曼编码*/
char b[3]={'1','1','1'};/*b的霍夫曼编码*/
char c[3]={'1','0'};/*c的霍夫曼编码*/
char d[3]={'0'};/*d的霍夫曼编码*/
char temp[3]={'\0','\0','\0'},shou[8];
r=strlen(bian);
for(i=0;i<r;)/*外层循环用于控制解码进度*/
{
temp[0] = temp[1] = temp[2] = 0;
for(k=0;k<3;k++)/*里层用于具体解析每个字符编码*/
{
w=i+k;
temp[k]=bian[w];
if(strncmp(temp,a,3)==0)/*判断编码是否为a*/
{
shou[j]='a';/*shou数组用于存储解析出来的字符*/
j++;
i=i+k+1;
break;/*如果解析成功就跳出里层循环,继续解析下一个编码*/
}
else if(strncmp(temp,b,3)==0)/*判断编码是否为b*/
{
shou[j]='b';
j++;
i=i+k+1;
break;
}
else if(strncmp(temp,c,2)==0)/*判断编码是否为c*/
{
shou[j]='c';
j++;
i=i+k+1;
break;
}
else if(strncmp(temp,d,1)==0)/*判断编码是否为d*/
{
shou[j]='d';
j++;
i=i+k+1;
break;
}
else
continue;/*如果都不是就再取出一个编码,再与abcd的字符编码相比*/
}
}
for(i=0;i<8;i++)
printf("%c",shou[i]);
return 0;
}
abdcbd
Press any key to continue
#include <stdio.h>
#include <string.h>
main()
{
int i,k,j=0,w,r;
char bian[30]={'1','1','0','1','1','1','1','0','0','1','1','0','1','1','1','1','0','0'};
char a[3]={'1','1','0'};/*a的霍夫曼编码*/
char b[3]={'1','1','1'};/*b的霍夫曼编码*/
char c[3]={'1','0'};/*c的霍夫曼编码*/
char d[3]={'0'};/*d的霍夫曼编码*/
char temp[3],shou[8];
r=strlen(bian);
for(i=0;i<r;i++)/*外层循环用于控制解码进度*/
{
for(k=0;k<3;k++)/*里层用于具体解析每个字符编码*/
{
w=i+k;
temp[k]=bian[w];
if(k==0){
if (temp[k] == '1'){ //a,b,c的第一个字符
continue;
}else{
//为d
shou[j]='d';
j++;
i=i+k+1;
break;
}
}
if (k==1){
if (temp[k]=='1'){//a,b
continue;
}else{
//为c
shou[j]='c';
j++;
i=i+k+1;
break;
}
}
if (k==2){
if (temp[k]=='1'){//b
shou[j]='b';
j++;
i=i+k+1;
break;
}else{
//a
shou[j]='a';
j++;
i=i+k+1;
break;
}
}
}
}
for(i=0;i<j;i++)
printf("%c",shou[i]);
printf("\n");
}