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

Сжатие текстовых файлов RLE - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как остановить программу на минуту? http://www.cyberforum.ru/cpp-beginners/thread1122747.html
Гуглил минут тридцать пять на все лады- нет. Там и прием витамина С перед сном, и все виды остановок чего и кем угодно- только не программные. ,,с++ справка остановка программы,,
C++ Возможно ли шаблонную функцию продекларировать в заголовочном файле Возможно ли шаблонную функцию продекларировать в заголовочном файле .h??? Если да, то как это сделать??? Спасибо! Буду признателен Например вот есть фукцния: template <class T1 , class T2> bool go_up_sequence(T1 *M, T2 s) { bool flag = false; if(M < M) { http://www.cyberforum.ru/cpp-beginners/thread1122738.html
Преобразование изображения из цветовой модели RGB в модель HSL C++
Всем доброго времени суток! Я учусь на программиста, и мне очень нужна ваша помощь. Что нужно для преобразования изображения из цветовой модели RGB в модель HSL на С++? С чего начать, какие библиотеки подключать, какими операторами лучше пользоваться? Заранее благодарен)
C++ Написать программу в которой все нулевые элементы размещены выше главной диагонали
помогите пожалуйста написать программу в которой все нулевые элементы размещены выше главной диагонали на нечетных строках и ниже главной диагонали - на четных.
C++ Написать программу, которая подсчитывает периметр прямоугольного треугольника http://www.cyberforum.ru/cpp-beginners/thread1122709.html
Написать программу, которая подсчитывает периметр прямоугольного треугольника по двум катетам a,b в Dev C++ и написать программу которая определяет одинаковы ли цифры данного двухзначного числа Dev C++ Каждую задачу надо публиковать отдельным постом
C++ Указатели на объект Здравствуйте, подскажите пожалуйста вот по какому вопросу... Начали изучать классы в С++, и сначала была задача ввода дроби, ее сокращению и выводу в общепринятом виде, теперь задача в том чтобы ввести несколько дробей и написать в классе функции которые будут делить и перемножать дроби. Теперь собственно сам мой вопрос: как правильно использовать указатели в этом случае? Чтобы просто прописать... подробнее

Показать сообщение отдельно
StasyanKO
9 / 9 / 0
Регистрация: 13.04.2013
Сообщений: 63

Сжатие текстовых файлов RLE - C++

18.03.2014, 13:58. Просмотров 789. Ответов 0
Метки (Все метки)

Здравствуйте! Написал программу для школьного проекта, которая сжимает текстовые файлы по алгоритму RLE. Она способна сжимать тексты, содержащие символы латинского алфавита. Главная особенность в том, что последовательность состоит всего из оного символа, программа не записывает '1'. В таком случае, даже если в тексте редко встречаются большие последовательности, размер файла не увеличится, а только сожмется на столько, на сколько возможно. Хочу услышать ваше мнение, мои ошибки и что мне нужно исправить . Вот скриншоты и исходник:
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
#include    <stdio.h>
#include    <fstream>
 
using namespace std;
 
ofstream    fout;
ifstream    fin;
 
int     op;
 
void compress(){
    printf("Compressing...\n");
    fin.open("input.txt");
    fout.open("output.txt");
    char    ch;
    int     num(0);
    while(!fin.eof()){
        ch = fin.get();
        num++;
        if (ch != fin.peek()){
            num > 1 ? fout << (char)(num - 128) << ch : fout << ch;
            num = 0;
        }
        else if (num == 127){
            fout << (char)(num - 128) << ch;
            num = 0;
        }
    }
    fin.close();
    fout.close();
    printf("Complete!\n");
}
 
void decompress(){
    printf("Decompressing...\n");
    fin.open("output.txt");
    fout.open("output2.txt");
    char    ch;
    int     num(0);
    while (!fin.eof()){
        ch = fin.get();
        if ((int)ch<0){ num = (int)ch + 128; fin >> ch; for (int i(0); i < num; i++) if (fin.peek() != '\0') fout << ch; }
        else if (fin.peek() != '\0') fout << ch;
    }
    fin.close();
    fout.close();
    printf("Complete!\n");
}
 
int main(){
    while (true){
        printf("1 to compress\n2 to decompress\n");
        scanf("%d", &op);
        if (op == 1) compress();
        else decompress();
    }
    return 0;
}
Сжатие текстовых файлов RLE
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru