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

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

Войти
Регистрация
Восстановить пароль
 
StasyanKO
9 / 9 / 0
Регистрация: 13.04.2013
Сообщений: 63
#1

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

18.03.2014, 13:58. Просмотров 853. Ответов 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
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2014, 13:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сжатие текстовых файлов RLE (C++):

Написать программу на основе алгоритма RLE (сжатие/восстановление массива) - C++
Массив из 0 и 1 целых чисел. Массив надо сжать, а затем восстановить массива. Надо написать программу по алгоритму RLE. Спасибо заранее ...

Обработчик текстовых файлов - C++
Добрый день,прошу помощи в этом нелегком(для меня ) задании ! Написать программу-обработчик текстовых файлов, создающую текстовый файл, в...

С использованием текстовых файлов - C++
помогите первокурснице..... Файл содержит целые числа. Вычислить сумму значений из файла, в двоичном представлении которых K...

Перекодировка текстовых файлов - C++
Всем привет. По курсовому проекту возник вопрос. Я попытался сначала сделать на Delphi, всё вышло. Сейчас пытаюсь сделать на С++ ...

Конкатенация текстовых файлов - C++
Подскажите примерно как действовать. Нужно соединить данные(строки)из 2ух текстовых файлов и результат вывести в выходной файл. В...

Конкатенация текстовых файлов - C++
Доброго времени суток. Нужно объединить заданное количество текстовых файлов. Результат слияния заданных файлов должен быть отображен через...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2014, 13:58
Привет! Вот еще темы с ответами:

Соединение 2 текстовых файлов - C++
#include &lt;string.h&gt; int filik (char*j, char*f, char*k) { FILE *F1, *F2, *F3; F1=fopen (j, &quot;r&quot;); if (F1==NULL) return 1; ...

Копирование текстовых файлов - C++
Столкнулся с такой проблемой : при копировании из одного файла в другой мне нужно исключить(пропустить) слова, которые начинаются на букву,...

Обработка текстовых файлов - C++
Я написал программу, которая выводит с файла допустим dfgdfg dfgdfg dfgdfg dfgdfg dfgdfg dfdfgdf Код: #include &lt;fstream.h&gt; ...

C++ подключение текстовых файлов - C++
Привет. Прошу прощения, если подобная тема уже есть, но я ее не нашел Как вижуал с++ подключить текстовый файл для чтения и записи?...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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