我在打印出我的结构成员时遇到了一些麻烦。这就是我到目前为止所做的:
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 << " ";
}
仅打印我存储的最后一个字符串。可能有人知道修复以及为什么会发生这种情况?如果有人能提供帮助,那就太好了!
答案 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--)
否则访问超出边界的数组元素是未定义的行为。