⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 encodebwt.c

📁 Burrows Wheeler Transform_Encoder and Decoder
💻 C
字号:
#include <stdlib.h>#include <string.h>#include <stdio.h> typedef unsigned char byte; //declaramos nuevo tipo de dato: unsigned char al que llamamos byte <de 0 a 255> byte *rotlexcmp_buf = NULL;  //buffer para todas las posibles rotaciones del textoint rottexcmp_bufsize = 0;  //tamano del buffer para la cadena a codificar//funcion para ordenar alfabeticamente, usada por la funcion qsort, compara los indice li y riint rotlexcmp(const void *l, const void *r) { int li = *(const int*)l; int ri = *(const int*)r; int ac = rottexcmp_bufsize; //acumulador   if(li == ri) return 0;   while (rotlexcmp_buf[li] == rotlexcmp_buf[ri])   {       if (++li == rottexcmp_bufsize)           li = 0;       if (++ri == rottexcmp_bufsize)           ri = 0;       if (!--ac)           return 0;	   }  //comprueba que realmente se haya ordenado el array   if (rotlexcmp_buf[li] > rotlexcmp_buf[ri])       return 1;   else      return -1;} //funcion para codificarvoid bwt_encode(byte *buf_in, byte *buf_out, int size, int *llave) {   int indices[size];   int i;   for(i=0; i<size; i++)       indices[i] = i;   rotlexcmp_buf = buf_in;   rottexcmp_bufsize = size;     qsort (indices, size, sizeof(int), rotlexcmp);   for (i=0; i<size; i++)       buf_out[i] = buf_in[(indices[i]+size-1)%size];   for (i=0; i<size; i++)   {       if (indices[i] == 0) {           *llave = i;	   printf ("llave: <%d>\n",i); //indica en que indice se encuentra la palabra original           return;       }		   }}int main() {   byte buf1[255];   byte buf2[255];   int llave;   printf ("Palabra a codificar: ");   scanf("%s",buf1);	   bwt_encode (buf1, buf2, strlen((const char*)buf1), &llave);   printf ("Codificado: <%.*s>\n", strlen((const char*)buf1), buf2);     return 0;}  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -