当前位置:   article > 正文

模拟行程编码(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为编码后的数据行

  1. #include <stdio.h>
  2. #define N 80 //定义最多处理的字符数
  3. void RLE(char *s,char *t);//s为输入数据行,t为编码后的数据行
  4. void RLE(char *s,char *t)
  5. {
  6. int i,p=0,sum;
  7. for(i=0;s[i]!='\0';i++)
  8. {
  9. sum=1;
  10. while(s[i]==s[i+1]&&s[i++]!='\0')sum++;//有重复字符则求出重复个数
  11. if(sum>1)//需要压缩
  12. {
  13. for(;sum>9;sum-=9)
  14. {
  15. t[p++]='9';
  16. t[p++]=s[i];
  17. }
  18. t[p++]=sum+'0';
  19. t[p++]=s[i];
  20. }
  21. else t[p++]=s[i];//不需要压缩直接复制
  22. }
  23. t[p]='\0';
  24. }
  25. int main()
  26. {
  27. char s[N+1],t[N+1];
  28. FILE *fp = NULL;
  29. printf("请输入一行字符:");
  30. scanf("%s",s);
  31. RLE(s,t);
  32. //printf("%s",t);
  33. fp=fopen("D:\\rle.dat", "a");
  34. if(fputs(t,fp)!=EOF)printf("结果已成功保存到D:\\rle.dat");
  35. fclose(fp);
  36. return 0;
  37. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/746881
推荐阅读
相关标签
  

闽ICP备14008679号