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

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

Восстановить пароль Регистрация
 
StasyanKO
9 / 9 / 0
Регистрация: 13.04.2013
Сообщений: 63
18.03.2014, 13:58     Сжатие текстовых файлов RLE #1
Здравствуйте! Написал программу для школьного проекта, которая сжимает текстовые файлы по алгоритму 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2014, 13:58     Сжатие текстовых файлов RLE
Посмотрите здесь:

С использованием текстовых файлов C++
C++ Конкатенация текстовых файлов
C++ C++ подключение текстовых файлов
Обработка текстовых файлов C++
Обработка текстовых файлов C++
C++ Обработчик текстовых файлов
C++ Написать программу на основе алгоритма RLE (сжатие/восстановление массива)
C++ Перекодировка текстовых файлов

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

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

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