Форум программистов, компьютерный форум, киберфорум
Наши страницы

Как раскодировать файл? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Создать структуру для хранения информации о матрице переменных http://www.cyberforum.ru/cpp-beginners/thread1096252.html
Struct Matr{ int m,n; int**ptr } Написать функции для видиления памяти под ммассив, Ввод и вывод данных,добавления матриц. Помогите пожалуйста вообще не шару в с++.
C++ Создать производные классы линейное уравнение и квадратное уравнение, в которых данная функция переопределена Создать абстрактный базовый класс уравнение с виртуальной функцией - корни уравнения. Создать производные классы линейное уравнение и квадратное уравнение, в которых данная функция переопределена. ... http://www.cyberforum.ru/cpp-beginners/thread1096251.html
C++ Найти максимальный элемент в массиве
Добрый день. Нужно найти максимальный элемент в массиве. При компиляции выдаёт 2 ошибки 1>d:\disk кирилл\проекты\programms\programms\programms.cpp(15) : error C2446: '>' : no conversion from...
C++ Как сделать Code Blocks на русском языке
на убунту поставил ее, она русская, поставил на винде и она вся на английском, где тут в настройках поставить русский
C++ Напечатать в файл таблицу значений функций http://www.cyberforum.ru/cpp-beginners/thread1096232.html
Напечатать в файл таблицу значений функций sin(x) и Ctg(x) на отрезке с шагом 0.1. Значения x печатать с одной стороны цифрой в дробной части,значение синуса-с пятью,а значения тангенса -в...
C++ Тестирование класса Добрый вечер. Создал класс для работы со строкам. Нужно его протестировать. В теории понимаю, что самый идеальный тест - это программа, которая считывает строки из одного файла и записывает в... подробнее

Показать сообщение отдельно
krgws
0 / 0 / 0
Регистрация: 08.02.2014
Сообщений: 4

Как раскодировать файл? - C++

13.02.2014, 23:28. Просмотров 701. Ответов 0
Метки (Все метки)

Алгоритм Хаффмана, работает нормально, но необходимо сделать, чтобы можно было прочесть уже сжатую информацию не в бинарном режиме.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <map>
#include <list>
#include <fstream>
#include <Windows.h>
 
using namespace std;
 
class Node
{
public:
int a;
char c;
Node *left, *right;
 
Node()
{
left=right=NULL;
}
 
Node(Node *L, Node *R) 
{  
    left =  L;
    right = R;
    a = L->a + R->a;  
}
};
 
 
struct MyCompare
{
    bool operator()(const Node* l, const Node* r) const { 
return l->a < r->a; 
}
};
 
 
vector<bool> code;                
map<char,vector<bool> > table;    
 
void BuildTable(Node *root)
{   
    if (root->left!=NULL) 
                      { code.push_back(0);
                      BuildTable(root->left);}
     
    if (root->right!=NULL)
                       { code.push_back(1);
                       BuildTable(root->right);}
   
    if (root->c) table[root->c]=code;     
    
    code.pop_back();
}
 
 
int main ()
{
 
 
ifstream f("D:\\1.txt");
 
map<char,int> m;
 
while (!f.eof())
{
char c = f.get(); 
   m[c]++;
}
 
  
 
          
   list<Node*> t;
   for( map<char,int>::iterator itr=m.begin(); itr!=m.end(); ++itr)
   {  
      Node *p = new Node;
      p->c = itr->first;
      p->a = itr->second;  
      t.push_back(p);   
   }    
 
 
  while (t.size()!=1)
  {  
     t.sort(MyCompare());
    
     Node *SonL = t.front();
     t.pop_front();
     Node *SonR = t.front(); 
     t.pop_front();
     
     Node *parent = new Node(SonL,SonR); 
     t.push_back(parent);
 
  }
Node *root = t.front();  
   BuildTable(root);   
 
    f.clear();
f.seekg(0); 
    
ofstream g("D:\\output.txt", ios::out | ios::binary);
    
    int count=0; char buf=0;
    while (!f.eof())
    { 
        char c = f.get();
  vector<bool> x = table[c];
  for(int n=0; n<x.size(); n++)
   {
       buf = buf | x[n]<<(7-count);   
    count++;   
    if (count==8)
    { 
        count=0;   g<<buf; buf=0; 
    } 
       }
    }
 
    f.close();
g.close(); 
 
 
 
ifstream F("D:\\output.txt", ios::in | ios::binary);
SetConsoleOutputCP(1251);  
Node *p = root;
count=0; char byte; 
byte = F.get();
while(!F.eof())
{  
    bool b = byte & (1 << (7-count) ) ; 
if (b) p=p->right;
else p=p->left;
if (p->left==NULL && p->right==NULL) {
cout<<p->c; p=root;
}
count++;
if (count==8) {
count=0; byte = F.get();
}
}
 
F.close();  
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru