其他分享
首页 > 其他分享> > 模拟行程编码(C语言)

模拟行程编码(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