C语言中的字符串压缩

C语言中的字符串压缩,c,string,C,String,我需要一个简单的字符串压缩算法/程序,可以用C语言实现(我使用的是Turbo C IDE 3.0)。我见过游程编码(RLE),但它只适用于重复字符 我想要一个算法,可以减少任何字符串的长度,如“ABCDEF”,并在解压缩时给出原始字符串 我知道C语言可能不适合这种情况,但我需要用C语言实现它。void compress(char*str,int len,int act); void compress(char *str,int len, int act); char str[100]; int

我需要一个简单的字符串压缩算法/程序,可以用C语言实现(我使用的是Turbo C IDE 3.0)。我见过游程编码(RLE),但它只适用于重复字符

我想要一个算法,可以减少任何字符串的长度,如“ABCDEF”,并在解压缩时给出原始字符串

我知道C语言可能不适合这种情况,但我需要用C语言实现它。

void compress(char*str,int len,int act);
void compress(char *str,int len, int act);
char str[100];
int length;

int main()
{
scanf("%s",str);
length=strlen(str);
//compression
//we need a recursive sol so that
//cases like abbbccc or abcccc are also taken care of
compress(str,0,0);
printf("%s",str);
scanf("%d",&length);

}   

 void compressString(char *str,int len, int act) {

    if(len<length) {
        int k=len;
        int count=0;
        int c, n;
        while(str[k]==str[len]){
            len++; count++;
        }
        n = 0;
        c=count;
        do {
            c /= 10;
            n++;
        } while (c != 0);

        compress(str,len,act+n+1);

        str[act]=str[k];
        if(k+count==length)
           str[act+n+1]='\0';
        for(c=0;c<n;c++) {
            str[act+n-c]=(count%10)+48;
            count=count/10;
        }

    }
char-str[100]; 整数长度; int main() { scanf(“%s”,str); 长度=strlen(str); //压缩 //我们需要一个递归sol,以便 //像abbccc或abcccc这样的病例也得到了处理 压缩(str,0,0); printf(“%s”,str); 扫描频率(“%d”和长度); } void compressString(char*str、int len、int act){
if(lenHuffman编码)在这里可能有用。没有任何算法可以“减少任何字符串的长度”。某些输入总是不可压缩的,尤其是短输入。如果字符串只包含数字和字母,您可以使用逆编码,您是否已经在使用BWT变换(如bzip2)在你的RLE上?@technosaurus不,我没有使用这些。我只是想要一个简单的算法,可能效率不高,但应该可以工作。我的大学项目需要它。长度神奇地出现在哪里?任何叙述?compress()将数据发送到克尔黑洞,并将任何大小的缓冲区压缩到36字节。str[act+n-c]=(计数%10)+48;=>>“错误:从'int'转换为'char'可能会改变其值[-Werror=conversion]|”