这段代码是我写哈夫曼编码的一个解压函数,现在的问题是,没有把我整个文件解压完,像图里面,只解压了一部分然后 ,还有剩下很多没读,
貌似是eof为真,导致读文件结束了 这是怎么回事啊?
void readCodeFile()
{
ifstream inf;
ofstream outf;
int w[200], c = 0;
char s[200];
string code;
HuffTreeTreeArray[100];
HuffNode tempNode;
char tempChar=0;
int k = 9;
inf.open("test.txt",ios::in);
inf >> c;
for (int i = 0; i < c; i++)
{
s[i] = inf.get();
inf >> w[i];
//cout << s[i] << "\t" << w[i] << "\t"<<i<<endl;
}
Word *word = new Word[c];
for (int i = 0; i < c; i++)
{
word[i].val = s[i];
word[i].frq = w[i];
}
for (int i = 0; i < c + 1; i++)
{
TreeArray[i] = new HuffTree<char>(s[i], w[i]);
}
HuffTree<char> *Tree = buildHuff(TreeArray, c);
codeBuild(Tree->root(), code, word, c);
outf.open("decode.txt");
tempNode = Tree->root();
while (!inf.eof())
{
if (k<8)
{
if (((tempChar >> (7 - k)) & 1) == 0)
{
tempNode = ((IntlNode<char>*) (tempNode))->right();
}
else if (((tempChar >> (7 - k)) & 1) == 1)
{
tempNode = ((IntlNode<char>*) (tempNode))->left();
}
if (tempNode->isLeaf())
{
outf << ((LeafNode<char>*) (tempNode))->val();
// cout << ((LeafNode<char>*) (tempNode))->val();
tempNode = Tree->root();
}
k++;
}
else
{
tempChar = inf.get();
cout << tempChar;
k = 0;
}
}
inf.close();
outf.close();
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。