首页 > 解决方案 > C90中的RLE压缩和解压实现

问题描述

我有点坚持执行if语句中的各种条件以打印出 RLE 压缩的正确输出。

它工作了一半,但输出了错误的结构。

这是输入文件“ AAAAAA333333FFFFF22222”中的字符,但这是压缩输出:“ 2536A6F5”,输出应该是“ 6A635F52”。

有人可以给我提示我需要在我的if声明中添加的内容,以便正确打印出来吗?

也有人可以给我有关实现 RLE 解压缩(解码)的提示吗?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main (void)
{
    int count[256] = { 0 };
    int n;
    int p;
    FILE * fp;
    FILE * fptr;
    fp = fopen("test.txt", "r");
    fptr = fopen("compressed_test.txt", "w");

    if (fp == NULL)
    {
        printf("Error file doesn't exist\n");
        printf("Nothing to compress\n");
        exit(0);

    }   

    while((n=fgetc(fp)))
    {
        if(n == EOF)
        {
            break;
        }   
        else
        count[n]+=1;
    }

    for (p=0; p < 256; p++)
    {
        if (count[p] > 0)
        {
            fprintf(fptr, "%c%d", p, count[p]);
            printf("Compression completed successfully\n");
        }
    }

    fclose(fp);
    fclose(fptr);
    return 0;
}

标签: cencodingcompression

解决方案


推荐阅读