2012-12-01 31 views
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); 
    } 
} 

这工作都正常,但主当我试图打印出来的成员序列在我的代码的数组中的码本:

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

createCodecount不是递增,因为你是通过值传递给它,切换到通过引用传递:

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

阵列的码本包括256个元素,但索引是从0到255的for循环应是:

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

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

+0

感谢您的支持!我只是解决了这个问题,但它仍然没有正确打印......任何其他提示? – user200081

+0

你应该通过引用 – billz

+0

通过countCode创建代码啊,这是完美的工作。谢谢! – user200081

1

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

要修复,请通过引用或指针传递count,或者使函数返回新值count

最后,for循环的起始值超出范围(以1为单位)。

+0

那么当我调用createCode()计数增加我的if语句不是吗? – user200081

+0

@ user200081:不是。你在第一个分支中增加它,然后在第二个分支中递归地调用createCreate()。你永远都不会这样做。 – NPE

+0

啊,帮助。谢谢!我明白我现在做错了什么。我需要通过参考...... – user200081