模拟行程编码(C语言)
作者:互联网
描述:行程编码是一种统计编码,适用于经常出现具有相间值的连续符号时的数据压缩, 考虑以行为单位进行处理(每行最多80个字符,以'\0'结尾,且不含数字字符)。
编码规则说明如下:
(1)超过9个相同字符时,每次截取9个进行编码,例如:12个*表示为9*3*:
(2)出现单个字符时,不编码,即直接复制该字符。
编程要求:(1)在主函数中实现循环从键盘接收数据行,调用RLE函数对数据进行编码, 将编码后的数据写入文本文件d:\rle.dat中,当输入空行(仅输入回车)时结束循环;
(2)在RLE函数中实现上述的行程编码规则。
程序头部与RLE函数的声明如下:#include <stdio.h>
#include<string.h>
#define N 80 //定义最多处理的字符数
void RLE(char *s,char *t);//s为
输入数据行,t为编码后的数据行
#include <stdio.h>
#define N 80 //定义最多处理的字符数
void RLE(char *s,char *t);//s为输入数据行,t为编码后的数据行
void RLE(char *s,char *t)
{
int i,p=0,sum;
for(i=0;s[i]!='\0';i++)
{
sum=1;
while(s[i]==s[i+1]&&s[i++]!='\0')sum++;//有重复字符则求出重复个数
if(sum>1)//需要压缩
{
for(;sum>9;sum-=9)
{
t[p++]='9';
t[p++]=s[i];
}
t[p++]=sum+'0';
t[p++]=s[i];
}
else t[p++]=s[i];//不需要压缩直接复制
}
t[p]='\0';
}
int main()
{
char s[N+1],t[N+1];
FILE *fp = NULL;
printf("请输入一行字符:");
scanf("%s",s);
RLE(s,t);
//printf("%s",t);
fp=fopen("D:\\rle.dat", "a");
if(fputs(t,fp)!=EOF)printf("结果已成功保存到D:\\rle.dat");
fclose(fp);
return 0;
}
标签:编码,字符,++,sum,行程,C语言,char,RLE 来源: https://blog.csdn.net/mirrorboat/article/details/121640441