赞
踩
描述:行程编码是一种统计编码,适用于经常出现具有相间值的连续符号时的数据压缩, 考虑以行为单位进行处理(每行最多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;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。