如何用C语言写RLE压缩解压算法的代码
时间: 2023-12-31 09:06:39 浏览: 109
以下是使用C语言实现RLE压缩解压算法的代码示例。
RLE压缩算法:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// RLE压缩函数
char* rle_compress(const char* data) {
int len = strlen(data);
char* result = (char*)malloc(len * 2 + 1);
int count = 1;
char ch = data[0];
int j = 0;
for (int i = 1; i < len; i++) {
if (data[i] == ch) {
count++;
} else {
result[j++] = count + '0';
result[j++] = ch;
ch = data[i];
count = 1;
}
}
result[j++] = count + '0';
result[j++] = ch;
result[j] = '\0';
return result;
}
int main() {
const char* data = "AAAABBBCCDDEEEE";
char* result = rle_compress(data);
printf("压缩前:%s\n", data);
printf("压缩后:%s\n", result);
free(result);
return 0;
}
```
RLE解压算法:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// RLE解压函数
char* rle_decompress(const char* data) {
int len = strlen(data);
char* result = (char*)malloc(len + 1);
int j = 0;
for (int i = 0; i < len; i += 2) {
int count = data[i] - '0';
char ch = data[i + 1];
for (int k = 0; k < count; k++) {
result[j++] = ch;
}
}
result[j] = '\0';
return result;
}
int main() {
const char* data = "4A3B2C2D4E";
char* result = rle_decompress(data);
printf("解压前:%s\n", data);
printf("解压后:%s\n", result);
free(result);
return 0;
}
```
需要注意的是,在使用RLE压缩算法时,我们需要注意压缩后的字符串长度可能会变长,因此需要使用动态分配内存的方式来存储结果。在解压算法中,我们也需要使用动态分配内存的方式来存储解压后的字符串。
阅读全文