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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Pharaoh_dp
0 / 0 / 0
Регистрация: 08.04.2012
Сообщений: 5
#1

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

20.05.2012, 17:40. Просмотров 884. Ответов 0
Метки нет (Все метки)

нашел программу по методу 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++
Написать программу сжатия полутонового bmp* файла по методу RLE

Алгоритм RLE - C++
Всех приветствую, нужна помощь, уже устал, суть такая: необходимо реализовать алгоритм RLE, при этом единичные символы записываются так,...

Компрессия RLE - C++
Здравствуйте. Требуется помощь по реализации кода. Задание следующее : Реализовать класс RLE который будет компрессить массив байт и...

алгоритм RLE - C++
Нужна помощь. Чтобы сделать алгоритм сжатия RLE на с++

Алгоритм RLE - C++
Прошу помочь выйти мне из тупика) Подсказки,исправление ли направление что и где исправлять. Задачи: 1. Написать функции чтения и...

RLE компресія на с++ - C++
есть програма int main(int argc, char* argv) { FILE *Pfile1 = fopen(&quot;test2.txt&quot;,&quot;rb&quot;); if(Pfile1 == NULL) { cout &lt;&lt;&quot;eror...

Компрессия и декомпрессия RLE - C++
Всем привет. Ребята подскажите пожалуйста, что нужно изменить в этом коде, чтобы он расшифровывал символы, которые были зашифрованы с...

ошибки для RLE - C++
Пишу курсовую сжатие по методу рле, нужно предусмотреть ошибки для корректной работы, 2 ошибки будут очевидны: 1) нет входного(а при...

Кодирование длин серий (RLE) - C++
Я уже полдня пытаюсь ошибку найти, всё 100 раз перепроверил и не могу всё равно найти в чем ошибка. У меня на входе файл 92,8 КБ, а на...

Кодирование длин серий RLE - C++
Есть код алгоритма кодирования длин серий RLE. Но есть траблы с декодированием:( Вот код #include &lt;iostream&gt; #include &lt;fstream&gt; ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru