频道栏目
首页 > 资讯 > 其他 > 正文

关于文件压缩和压缩代码

17-11-11        来源:[db:作者]  
收藏   我要投稿

一,目标

写一个程序压缩文件已生成另外一个新文件。新文件要比原始文件小。检查结果,确保程序可以利用新文件重新生成新的文件。

二,示例代码

#include
#define MAX_NUM 10
void 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型变量。

相关TAG标签
上一篇:在PHP中使用魔术方法__CLASS__来获取类名的教程
下一篇:旋转 or 翻转 “编程题”
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站