打印出数组成员错误的对象

时间:2012-12-01 07:17:30

标签: c++ arrays string printing

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

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 << " ";
}

仅打印我存储的最后一个字符串。可能有人知道修复以及为什么会发生这种情况?如果有人能提供帮助,那就太好了!

2 个答案:

答案 0 :(得分:1)

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

要修复,要么通过引用或指针传递count,要么让函数返回count的新值。

最后,for循环的起始值超出界限(关闭一个)。

答案 1 :(得分: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--)

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