Программная реализация простейшего алгоритма сжатия данных (методом кодирования повторов) - C (СИ)
Формулировка задачи:
Требуется программная реализация простейшего алгоритма сжатия данных(методом кодирования повторов), кто-нибудь может помочь? (С/С++)
Решение задачи: «Программная реализация простейшего алгоритма сжатия данных (методом кодирования повторов)»
textual
Листинг программы
- //
- // RLE.CPP
- //
- // Mark Nelson
- // March 8, 1996
- // [url]http://web2.airmail.net/markn[/url]
- //
- // DESCRIPTION
- // -----------
- //
- // This program performs a Run Length Encoding function on an
- // input file/stream, and sends the result to an output file
- // or stream. In the output stream, any two consecutive
- // characters with the same value flag a run. A byte following
- // those two characters gives the count of *additional*
- // repeat characters, which can be anything from 0 to 255.
- //
- // Using the RLE program as a front end to BWT avoids
- // pathologically slow sorts that occur when the input stream
- // has long sequences of identical characters. (Which means
- // comparison functions have to spend lots of time on a pair
- // of strings before deciding who is larger.)
- //
- // This program takes two arguments: an input file and an output
- // file. You can leave off one argument and send your output to
- // stdout. Leave off two arguments and read your input from stdin
- // as well.
- //
- // This program accompanies my article "Data Compression with the
- // Burrows-Wheeler Transform."
- //
- // Build Instructions
- // ------------------
- //
- // Define the constant unix for UNIX or UNIX-like systems. The
- // use of this constant turns off the code used to force the MS-DOS
- // file system into binary mode. g++ already does this, your UNIX C++
- // compiler might also.
- //
- // Borland C++ 4.5 16 bit : bcc -w rle.cpp
- // Borland C++ 4.5 32 bit : bcc32 -w rle.cpp
- // Microsoft Visual C++ 1.52 : cl /W4 rle.cpp
- // Microsoft Visual C++ 2.1 : cl /W4 rle.cpp
- // g++ : g++ -o rle rle.cpp
- //
- // Typical Use
- // -----------
- //
- // rle < raw-file | bwt | mtf | rle | ari > compressed-file
- //
- //
- #include <stdio.h>
- #if !defined( unix )
- #include <io.h>
- #include <fcntl.h>
- #endif
- main( int argc, char *argv[] )
- {
- fprintf( stderr, "Run length encoding " );
- if ( argc > 1 ) {
- freopen( argv[ 1 ], "rb", stdin );
- fprintf( stderr, "%s", argv[ 1 ] );
- } else
- fprintf( stderr, "stdin" );
- fprintf( stderr, " to " );
- if ( argc > 2 ) {
- freopen( argv[ 2 ], "wb", stdout );
- fprintf( stderr, "%s", argv[ 2 ] );
- } else
- fprintf( stderr, "stdout" );
- fprintf( stderr, "\n" );
- #if !defined( unix )
- setmode( fileno( stdin ), O_BINARY );
- setmode( fileno( stdout ), O_BINARY );
- #endif
- int last = 0;
- int c;
- while ( ( c = getc( stdin ) ) >= 0 ) {
- putc( (char) c, stdout );
- if ( c == last ) {
- int count = 0;
- while ( count < 255 &&
- ( ( c = getc( stdin ) ) >= 0 ) ) {
- if ( c == last )
- count++;
- else
- break;
- }
- putc( (char) count, stdout );
- if ( count != 255 && c >= 0 )
- putc( (char) c, stdout );
- }
- last = c;
- }
- return 1;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д