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

Реализация по методу RLE - C++

Восстановить пароль Регистрация
 
Pharaoh_dp
0 / 0 / 0
Регистрация: 08.04.2012
Сообщений: 5
20.05.2012, 17:40     Реализация по методу RLE #1
нашел программу по методу RLE, но она в конечном счете выдает только начальные символы, а коэффициенты "проглатывает". Например, вводим "wwwwwwwwwddddddddd11111111122222333", а на выходе получаем "wd123". Может где ошибка, посмотрите пожалуйста.

Код
#include <iostream>
#include <stdio.h>
#include <conio.h>
 
class RLE {
    public:
        void compress(char *inputFile, char *outputFile) {
            FILE *inFile = fopen(inputFile, "rb");
            FILE *outFile = fopen(outputFile, "wb");
            char oldChar = '\0';
            long times = 0;
            int first = 1;
            while (1) {
                char ch = fgetc(inFile);
                if (feof(inFile)) {
                    break;
                }
                if (first) {
                    oldChar = ch;
                    times = 1;
                    first = 0;
                } else {
                    if (ch == oldChar) {
                        times++;
                        if (times == 255) {
                            fputc(oldChar, outFile);
                            fputc('\xFF', outFile);
                            times = 0;
                        }
                    } else {
                        fputc(oldChar, outFile);
                        fputc(char(times), outFile);
                        times = 1;
                        oldChar = ch;
                    }
                }
            }
            fputc(oldChar, outFile);
            fputc(char(times), outFile);
            fclose(inFile);
            fclose(outFile);
        }
        void decompress(char *inputFile, char *outputFile) {
            FILE *inFile = fopen(inputFile, "rb");
            FILE *outFile = fopen(outputFile, "wb");
            char ch, count;
            while (1) {
                ch = fgetc(inFile);
                count = fgetc(inFile);
                if (feof(inFile)) {
                    break;
                }
                for (int i = 0; i < count; i++) {
                    fputc(ch, outFile);
                }
            }
            fclose(inFile);
            fclose(outFile);
        }
};
 
 
int main() {
    RLE *r = new RLE();
    r->compress("10x10.txt", "out.txt");
    r->decompress("out.txt", "in.txt");
    delete r;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2012, 17:40     Реализация по методу RLE
Посмотрите здесь:

RLE компресія на с++ C++
Метод RLE C++
Реализация алгоритма RLE C++
C++ алгоритм RLE
C++ ошибки для RLE
C++ Кодирование длин серий RLE
C++ Компрессия и декомпрессия RLE
C++ Компрессия RLE

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 17:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru