char input[MAX_NODE]; printf("请输入一串二进制编码:\n "); scanf("%s", input); int len = strlen(input); int p = n*2 - 2; for (int i = 0; i < len; i++) { if (input[i] == '0') { p = ht[p].lchild; } else { p = ht[p].rchild; } if (ht[p].lchild == -1) { printf("%c ", c[p+1]); p = n*2 - 2; } } printf("\n");有什么错误
时间: 2024-03-15 19:44:51 浏览: 58
408c语言基础-进制转换-数据基本类型关于int,char,float.printf.scanf
这段代码的错误在于,在进行哈夫曼编码解码时,应该根据每个字符的编码依次遍历哈夫曼树,而不是根据输入的二进制编码依次遍历。因此,在解码时应该先将输入的二进制编码转换成对应的字符编码,然后再根据字符编码依次遍历哈夫曼树。
另外,在输出字符时,应该输出所有的字符,而不是只输出第一个字符。修改后的代码如下:
```
char input[MAX_NODE];
printf("请输入一串二进制编码:\n ");
scanf("%s", input);
int len = strlen(input);
int p = n*2 - 2;
for (int i = 0; i < len; i++) {
if (input[i] == '0') {
p = ht[p].lchild;
} else {
p = ht[p].rchild;
}
if (ht[p].lchild == -1) {
printf("%c", c[p-n]);
p = n*2 - 2;
}
}
printf("\n");
```
阅读全文