У меня проблемы с декомпрессионной частью моего проекта [закрыто]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 У меня проблемы с декомпрессионной частью моего проекта [закрыто]

Сообщение Anonymous »

Приведенный ниже код должен взять файл TXT и сжать в файл bin. Затем, если он будет предложен, он должен занять тот же двоичный файл и распаковать его в другой файл TXT. < /P>
В этом коде используется алгоритм кодирования Хаффмана для сжатия. Я пробовал сжатие, которое работало нормально, но декомпрессия не работает должным образом.#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;

struct TreeNode
{
char data;
unsigned int freq;
TreeNode *right, *left;

TreeNode(char d, unsigned int f)
{
data = d;
freq = f;
right = nullptr;
left = nullptr;
}
};

struct CompareNodes
{
bool operator()(TreeNode *left, TreeNode *right)
{
return left->freq > right->freq;
}
};

class Solution
{
private:
void deleteTree(TreeNode *node)
{
if (node == nullptr)
return;
deleteTree(node->left);
deleteTree(node->right);
delete node;
}
unordered_map loadFile(const string &filename)
{
unordered_map freq;
ifstream file(filename, ios::binary);

if (!file.is_open())
{
cout right)
{
codeMaps[node->data] = currentString.empty() ? "0" : currentString;
return;
}

generateCodes(node->left, currentString + '0', codeMaps);
generateCodes(node->right, currentString + '1', codeMaps);
}

public:
void compress(const string &filename, const string &outputFile)
{
unordered_map mp = loadFile(filename);

if (mp.empty())
{
cout left = single;
newRoot->right = nullptr;
minHeap.pop();
minHeap.push(newRoot);
}

while (minHeap.size() > 1)
{
TreeNode *l = minHeap.top();
minHeap.pop();

TreeNode *r = minHeap.top();
minHeap.pop();

TreeNode *newNode = new TreeNode('\0', l->freq + r->freq);
newNode->left = l;
newNode->right = r;

minHeap.push(newNode);
}

TreeNode *root = minHeap.top();
unordered_map codeMaps;
generateCodes(root, "", codeMaps);

long long total_chars = 0;
for (const auto &pair : mp)
{
total_chars += pair.second;
}

ofstream outFile(outputFile, ios::binary);
if (!outFile.is_open())
{
cout

Подробнее здесь: https://stackoverflow.com/questions/797 ... my-project
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»