0

我在打印出我的结构成员时遇到了一些麻烦。这是我到目前为止所拥有的:

struct Code
{
  char letter;
  string sequence;
}

void createCode(HuffmanNode *root, string codestr, Code *codeBook, int count)
{
  if(root->getRight() == NULL && root->getLeft() == NULL)
  {
    Code code;
    code.letter = root->getLetter();
    code.sequence = codestr;
    codeBook[count] = code;
    count++;
  }
  else
  {
    createCode(root->getLeft(), codestr + "1", codeBook, count);
    createCode(root->getRight(), codestr + "0", codeBook, count);
  }
}

这一切正常,但主要是当我尝试在 Codebook 中的代码数组中打印出成员序列时:

string codestr;
count = 0;
Code codeBook[256];
createCode(root, string codestr, codeBook, count); //root is already created 
for(int i = 256; i >= 0; i--)
{
  if(isalpha(codeBook[i].letter))
  cout << codeBook[i].sequence << " ";
}

只打印我存储的最后一个字符串。可能有人知道解决方法以及为什么会这样吗?如果有人可以提供帮助,那就太好了!

4

2 回答 2

1

主要问题是createCode()总是通过count=0。因此,您将所有Code条目存储在数组的第零位,最后一个将覆盖所有先前的条目。

要解决此问题,count请通过引用或指针传递,或者使函数返回count.

最后,循环的起始值for超出范围(减一)。

于 2012-12-01T07:20:17.553 回答
0

当您createCode,count不递增时,因为您是按值传递它,所以更改为按引用传递:

void createCode(HuffmanNode *root, string codestr, Code *codeBook, int& count)

数组 codeBook 包含 256 个元素,但索引从 0 到 255。for 循环应该是:

for(int i = 255; i >= 0; i--)

否则访问越界数组元素是未定义的行为。

于 2012-12-01T07:19:42.843 回答