C++ 打印出数组';s成员错误
我在打印出我的结构的一个成员时遇到了一点问题。这就是我到目前为止所做的:C++ 打印出数组';s成员错误,c++,arrays,string,printing,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) { Co
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 << " ";
}
stringcodestr;
计数=0;
码本[256];
createCode(根、字符串codestr、码本、计数)//根目录已创建
对于(int i=256;i>=0;i--)
{
if(isalpha(代码本[i].字母))
cout当您createCode
时,count
不是递增的,因为您是按值传递的,请更改为按引用传递:
void createCode(HuffmanNode *root, string codestr, Code *codeBook, int& count)
数组代码本包含256个元素,但索引范围为0到255。for循环应为:
for(int i = 255; i >= 0; i--)
否则,对边界外数组元素的访问是未定义的行为。主要问题是createCode()
总是被传递count=0
。因此,您将所有code
条目存储在数组的第0个位置,最后一个条目覆盖以前的所有条目
若要修复,请通过引用或指针传递count
,或使函数返回count
的新值
最后,
循环的的起始值超出范围(以1为界)。感谢您捕捉到这一点!我刚刚修复了它,但它仍然没有正确打印出来……还有其他提示吗?当我调用createCode()时,您应该通过引用将计数传递给createCode在我的if语句中count是递增的,不是吗?@user200081:不是真的。你在第一个分支中递增它,在第二个分支中递归调用createCreate()。你从来不会同时做这两件事。啊,这很有帮助。谢谢!我明白我现在做错了什么。我需要通过引用传递。。。