关于文件压缩的代码
来源:互联网 发布:win10网络图标红叉 编辑:程序博客网 时间:2024/05/23 20:07
一,目标
写一个程序压缩文件已生成另外一个新文件。新文件要比原始文件小。检查结果,确保程序可以利用新文件重新生成新的文件。
二,示例代码
#include<stdio.h>#define MAX_NUM 10void compression(char *start, int number[],char array[],int *subscript);void unzip(int subscript,char start,int number[]);void main(){int subscript = 0;char start;int number[MAX_NUM];char num[] = "0000000000000001111111111111111111100000111111111111111111111111111111111";/*************************** 压缩部分 *********************************/compression(&start,number,num,&subscript);printf("个数是:%d\n",subscript);printf("开头是:%c\n",start);printf("数组为:");printf("\n");/*************************** 解压部分 *********************************/unzip(subscript,start,number);}void compression(char *start, int number[],char array[],int* subscript){ *subscript = 0;int count = 0;*start = array[0];for (int i = 0;; i++){if (array[i] == 0){break;}//不要写number[subscript]++,只能写成number[subscript]=count因为number[]初始为负的很多数。count++;if (array[i] != array[i + 1]){number[*subscript] = count;count = 0;//注意:这里不能是*subscript,因为++的优先级大于*.(*subscript)++;}}}void unzip(int subscript,char start,int number[]){int real_start = start - '0';for (int i = 0; i < subscript; i++){for (int j = 0; j < number[i]; j++){printf("%d",real_start);}//当初在这个问题上纠结了很久,就是,我们很容易识别出第一个,但是第二个如何取成另一个,并且不断//循环迭代下去,一开始我用的real_start = real_start是char型的,但最后发现char型容易乱码,所以//最后确定用int型,int型是不会乱码的。real_start = !real_start;}}三,思想
1,压缩的思想:先确定数组的初始为0还是1,然后依次统计0和1出现的次数形成一个int型的数组,例如000000000011111可以用一个int型的{10,5}表示。
四,需要处理的细节问题。
1,初定义一个数组,例如char array[10];想把它的值赋成1不能采用array[0]++这种的方式,应该采用array[0] = 1的方式,因为array[10]的初始是把它设置成类似-8888(大约)这种无穷小的数。
2,想把一个指针指向的内容加一,例如*pointer以前为0,想把它的值变成1,不能采用*pointer++这种方式,应该采用(*pointer)++这种方式,因为++的优先级高于*。
3,想把一个值取反为0,再取反为1,不能用char型变量,应该采取int型变量。
阅读全文
0 0
- 关于文件压缩的代码
- 关于zlib压缩算法的代码
- 关于图片压缩的代码实现Swift
- 用Java代码实现文件的压缩
- Java文件压缩代码
- [爬坑]关于angularJS的controller文件压缩的问题
- .Net2.0新增的对文件压缩代码
- 把文件压缩成zip包的代码
- 用java代码实现文件的zip压缩与解压
- 图片文件压缩java代码
- 文件的压缩和解压缩
- 文件的压缩和解压缩
- 关于java中压缩与解压缩文件的问题
- 关于文件压缩与解压缩的那些事zipArchive
- 关于信息量的压缩
- 关于mina的文件上传代码示例
- 关于mina的文件上传代码示例
- 关于文件/附件下载的Java代码
- input里添加小图标
- CDH
- Java实训——编写一个窗体应用程序模拟交通信号灯。
- JAVA AOP
- 【POJ
- 关于文件压缩的代码
- 对象式宏 object-like macro
- Go基础编程:作用域
- HTML5JavaScript----1.点击显示对话框2.跳转到另一个网页3.记录历史
- Spring + DbUnit 测试
- LINUX的LVM使用
- tomcat配置访问项目时不需要添加项目名称
- eclipse中安装properties插件PropertiesEditor及设置(附图),ASCII码转换成中文
- 假的2048