【问题标题】:Printing out an object of array's members error打印出数组成员错误的对象
【发布时间】:2012-12-01 07:17:29
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ arrays string printing


    【解决方案1】:

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

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

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

    【讨论】:

    • 好吧,当我调用 createCode() 时,我的 if 语句中的计数会增加不是吗?
    • @user200081:不是这样。您在第一个分支中递增它,并在第二个分支中递归调用 createCreate()。你永远不会同时做这两件事。
    • 啊,有帮助。谢谢!我现在明白我做错了什么。我需要通过引用...
    【解决方案2】:

    当你createCode时,count不递增,因为你是传值,改成传引用:

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

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

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

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

    【讨论】:

    • 感谢您的关注!我刚刚修复了它,但它仍然没有正确打印出来......还有其他提示吗?
    • 你应该通过引用将count传递给createCode
    猜你喜欢
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    相关资源
    最近更新 更多