13. 压缩文本
来源:互联网 发布:mmd制作软件最新版 编辑:程序博客网 时间:2024/06/09 18:52
压缩是一种有效的减小数据量的方法,目前已经被广泛应用于各种类型的信息系统之中。一种压缩文本的方法如下:
- 原始文本文件中的非字母的字符,直接拷贝到压缩文件中;
- 原始文件中的词(全部由字母组成),如果是第一次出现,则将该词加入到一个词的列表中,并拷贝到压缩文件中;否则该词不拷贝到压缩文件中,而是将该词在词的列表中的位置拷贝到压缩文件中;
- 词的列表的起始位置为 1。
词的定义为文本中由大小写字母组成的最大序列。(单词不跨行)大写字母和小写字母认为是不同的字母,即 abc 和 Abc 是不同的词。例子如下:
- x-ray 包括两个词 x 和 ray
- mary's 包括两个词 mary 和 s
- a c-Dec 包括三个词 a 和 c 和 Dec
请编写一个程序,实现文本的压缩。
输入
输入为一段文本,你可以假设输入中不会出现数字、每行的长度不会超过 80 个字符,并且输入文本的大小不超过 10M。
输出
输出压缩后的文本。
- Please, please do it--it would please Mary very,↵
- very much.↵
- ↵
- Thanks↵
- Please, please do it--4 would 2 Mary very,↵
- 7 much.↵
- ↵
- Thanks↵
#include <stdio.h>#include <string.h>char wdss[10005][85] = { '\0' };int ddx = 0;int strCmp(char *p, char *ws){if (strlen(p) != strlen(ws))return 1;for (int k = 0; p[k] != '\0'; k++)if (p[k] != ws[k])return 1;return 0;}int wdfd(char *p){int j;for (j = ddx / 2; j < ddx; j++)if (p[0] == wdss[j][0])if (!strCmp(p, wdss[j]))return j;for (j = 0; j < ddx / 2; j++)if (p[0] == wdss[j][0])if (!strCmp(p, wdss[j]))return j;return -1;}int main(void){char wds[85] = { '\0' }, c;unsigned int i = 0, n;while ((c = getchar()) != EOF){if (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z')){wds[i++] = c;wds[i] = 0;continue;}else if (i){if ((n = wdfd(wds)) != -1)printf("%d", n + 1);else{printf("%s", wds);strcpy(wdss[ddx++], wds);memset(wds, '\0', sizeof(wds));}i = 0;}putchar(c);}return 0;}
阅读全文
0 0
- 13. 压缩文本
- 文本压缩
- 文本压缩
- Managing Gigabytes--文本压缩
- 文本压缩理论简介
- CSharp_SevenZipSharp压缩解压文本
- 文本压缩1
- 文本压缩过滤器实现
- Linux压缩文本及文件
- LZW 文本压缩及解压
- 常见的文本压缩算法
- 压缩文本、字节或者文件的压缩辅助类-GZipHelper
- java实现文本和文件的压缩和解压缩
- Huffman编解码实现文本压缩
- 通过mod_deflate进行HTTP文本压缩
- 哈夫曼树实验(文本压缩与解压)
- c#中用ICSharpCode.SharpZipLib实现文本压缩
- 基于huffman编码的文本压缩程序
- Last non-zero Digit in N!
- Computer Networking A Top-Down Approach 总结
- 框架是为解决问题而诞生的,从底层了解学习
- 定时任务
- Scala基础—偏函数的示例
- 13. 压缩文本
- 百度贾磊LSTM+CTC详解
- 常用FFMPEG命令
- CherryPy中文文档-基础知识1
- Android edittext 禁止复制粘贴问题解决方案
- STL之deque容器详解
- 14. 逻辑行计数
- 菜鸡的成长第一弹 ———— tomcat启动的各种错误
- 15. 数字游戏