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

Код Хаффмана - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как в Visual Studio 2010 развернуть окно выполнения программы на весь экран? http://www.cyberforum.ru/cpp-beginners/thread562003.html
Создаю в Студии 2010 консольное приложение. Запускаю программу F5. Появляется маленькое чёрное окошко и в нём выводятся нужные мне числа. У окошка вверху справа есть 3 стандартные кнопки: Свернуть,...
C++ Приведение типов. Доброго времени суток! В общем, есть класс Matrix(прямоугольные над полем вещ. чисел). Необходимо реализовать приведение типов Matrix -> double и double -> Matrix. Значит, как я пытаюсь это... http://www.cyberforum.ru/cpp-beginners/thread561998.html
графический вывод бинарного дерева C++
Имеется текст проги создающей и выводящей бинарное дерево, но вывод дерева происходит горизонтально. Как сделать вывод в нормальном "древесном виде"? //Ïðîãðàììà ôîðìèðóåò äåðåâî èç ìàññèâà öåëûõ...
Cуществует более одного экземпляра перегруженная функция pow C++
При написание программы про решение задачи, выдает ошибку связанную с функцией pow. Подскажите как ее исправить. #include<stdio.h> #include<math.h> int main() { float x, y, z, a, b;...
C++ Сортировка, не изменяя структуру http://www.cyberforum.ru/cpp-beginners/thread561974.html
#include <conio.h> #include <string.h> #include <stdio.h> struct autopark{ //объявление структуры autopark char brand; //марка автобуса char date; //год выпуска автобуса...
C++ Дана последовательность чисел. Выяснить , сколько раз в ней встречается максимальное число. Дана последовательность чисел. Выяснить , сколько раз в ней встречается максимальное число. подробнее

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

Код Хаффмана - C++

30.04.2012, 12:04. Просмотров 1269. Ответов 0
Метки (Все метки)

Здравствуйте! Нужна ваша помощь..
Нашла архиватор, работающий по алгоритму Хаффмана.
Создала файл text.txt с набором букв на английском и различных знаков. Поместила в папку с программой.
Код программы:
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
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <queue>
#include <algorithm>
 
    using namespace std;
     
    struct node {
    int weight;
        unsigned char value;
        const node *child0;
        const node *child1;
     
        node( unsigned char c = 0, int i = -1 ) {
            value = c;
            weight = i;
            child0 = 0;
            child1 = 0;
        }
     
        node( const node* c0, const node *c1 ) {
            value = 0;
           weight = c0->weight + c1->weight;
            child0 = c0;
            child1 = c1;
        }
     
    bool operator<( const node &a ) const {
            return weight >a.weight;
        }
     
        void traverse(string code="") const {
             
        if ( child0 ) {
            child0->traverse( code + '0' );
            child1->traverse( code + '1' );
        } else {
            cout <<" " <<value <<"      ";
            cout <<weight;
            cout <<"   " <<code <<endl;
        }
    }
     
    };
     
     
    void count_chars( int *counts )
    {
        for ( int i = 0 ; i <256 ; i++ )
            counts[ i ] = 0;
        ifstream file( "text.txt" );
        if ( !file ) {
            cout <<"Couldn't open the input file!\n";
            throw "abort";
        }    file.setf( ios::skipws );
        for ( ; ; ) {
            unsigned char c;
            file>> c;
            if ( file )
                counts[ c ]++;
            else
                break;
       }
    }
     
    int main()
    {
        int counts[ 256 ];
        count_chars( counts );
        priority_queue < node > q;
     
        for ( int i = 0 ; i <256 ; i++ )
            if ( counts[ i ] )
                q.push( node( i, counts[ i ] ) );
     
        while ( q.size() >1 ) {
            node *child0 = new node( q.top() );
            q.pop();
            node *child1 = new node( q.top() );
            q.pop();
            q.push( node( child0, child1 ) );
        }
     
        cout <<"CHAR  FREQUENCY  HOFFMAN-CODE" <<endl;
        q.top().traverse();
        return 0;
    }
Проблема заключается в том, что программа вроде бы работает, но файл как был 152 байта, так и остался.. Что делать?
Заранее спасибо за помощь.
Вот, что выходит:
0
Миниатюры
Код Хаффмана  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru