Форум программистов, компьютерный форум CyberForum.ru

Как раскодировать файл? - 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 'int *' to 'int' 1>d:\disk кирилл\проекты\programms\programms\programms.cpp(15) : error C2040: '>' : 'int' differs in levels of indirection from 'int ' Вот сам код программы
C++ Как сделать Code Blocks на русском языке
на убунту поставил ее, она русская, поставил на винде и она вся на английском, где тут в настройках поставить русский
C++ Напечатать в файл таблицу значений функций http://www.cyberforum.ru/cpp-beginners/thread1096232.html
Напечатать в файл таблицу значений функций sin(x) и Ctg(x) на отрезке с шагом 0.1. Значения x печатать с одной стороны цифрой в дробной части,значение синуса-с пятью,а значения тангенса -в экспоненциальной форме . Обязательно должны присутствовать заголовок и шарка таблицы
C++ Тестирование класса Добрый вечер. Создал класс для работы со строкам. Нужно его протестировать. В теории понимаю, что самый идеальный тест - это программа, которая считывает строки из одного файла и записывает в другой. Но как программно это реализовать не могу понять. Литературы толковой тоже не нашел. Помогите, пожалуйста. Описание класса: #ifndef BUFSTR_H #define BUFSTR_H #include<string.h>... подробнее

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

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

13.02.2014, 23:28. Просмотров 584. Ответов 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();  
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru