У меня есть программа, которая создает дерево Хаффмана на основе частоты символов ascii, считываемой в текстовом файле ввода.Коды Хаффмана хранятся в строковом массиве из 256 элементов, пустая строка, если символ не читается.
Сейчас я пытаюсь реализовать дерево Хаффмана, написав функцию, которая принимает мои коды Хаффмана, которые хранятся встроковый массив и вывод кодировки входного файла в выходной файл.
Вскоре я понял, что мой нынешний подход опровергает значение задания.Я попытался просто скопировать строку кодов в выходной файл, сделав мой закодированный выходной файл больше, чем входной файл.
Я надеюсь получить помощь в изменении моей текущей функции, чтобы она могла выводить биты в выходной файлсделать выходной файл меньше, чем входной файл.Я застрял, потому что я только читаю и пишу байты в настоящее время?
Моя текущая функция (fileName - параметр входного файла, fileName2 - параметр выходного файла):
void encodeOutput(const string & fileName, const string & fileName2, string code[256]) {
ifstream ifile;//to read file
ifile.open(fileName, ios::binary);
if (!ifile)//to check if file is open or not
{
die("Can't read again"); // function that exits program if can't open
}
ofstream ofile;
ofile.open(fileName2, ios::binary);
if (!ofile) {
die("Can't open encoding output file");
}
int read;
read = ifile.get();//read one char from file and store it in int
while (read != -1) {//run this loop until reached to end of file(-1)
ofile << code[read]; //put huffman code of character into output file
read = ifile.get();//read next character
}
ifile.close();
ofile.close();
}