Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 创建用于压缩c++;_C++_File_Tree_Compression_Huffman Code - Fatal编程技术网

C++ 创建用于压缩c++;

C++ 创建用于压缩c++;,c++,file,tree,compression,huffman-code,C++,File,Tree,Compression,Huffman Code,早上好。 我在C++中创建了一个哈夫曼树,它非常完美。 如果我从文件中提取一个简单的字符串,并将其放在我的哈夫曼树上 原文如下: 再见,哈夫曼的算法 在使用我的哈夫曼树进行压缩的最后,我将有一个编码字符串,如下所示: 111101010 1001101111111010111011100011100001 0111100010101111100010 1100000 010 1101001001001100101101111011010 111010101111011010 111010 100

早上好。 我在C++中创建了一个哈夫曼树,它非常完美。 如果我从文件中提取一个简单的字符串,并将其放在我的哈夫曼树上

原文如下:

再见,哈夫曼的算法

在使用我的哈夫曼树进行压缩的最后,我将有一个编码字符串,如下所示:

111101010 1001101111111010111011100011100001 0111100010101111100010 1100000 010 1101001001001100101101111011010 111010101111011010 111010 10001011100000 010 11000111111000001 111001001001111001001001001111001001001001111001001001001001110000100100100100100100100111000010010010010010010010011100001001001011011011011011011011011011011011011011011001001101110000100111000010011100001

我必须把这个字符串写在一个文件中,理论上,这个文件必须比原始文件小,但很明显,这个文件的大小更大,因为编码的字符串更长

我试图将字符串写入二进制文件,但它不起作用。它的大小始终大于输入的大小

void IOFile :: WriteBinary(string str,string nome)
{
    ofstream file (nome.c_str(),ios::out|ios::binary);

    int len = str.size();

    char *stringa = new char[len];
    size_t length = str.copy(stringa, len);
    stringa[length] = '\0';
    file.write((char*)&stringa,len);
    file.close();
    delete stringa;
}


string IOFile :: ReadBinary(string percorso)
{
    ifstream file(percorso.c_str(),ios::in | ios::binary);
    file.seekg(0, ios::end);

    int sizeInBytes = file.tellg();
    file.seekg(0);

    char *buff = new char[sizeInBytes];
    if (file.is_open())
    {
        file.read((char*)&buff,sizeInBytes);
        file.close();
    }

    string stringa = buff;
    delete buff;
    return stringa;
}
<>这是我写的C++代码,现在写和读这个赫夫曼文件,但是,我怎么解释它的行为不正确? 你能帮我创建一个比原始文件小的哈夫曼文件吗