zfbm.c

来自「文件压缩中的游程编码源程序。已经测试通过。对重复字符较多的文件压缩率较高。」· C语言 代码 · 共 67 行

C
67
字号
/*该函数将一样的char型字符串压缩成[字符]@[个数]的形式*/
#include <stdio.h>
main()
{
	unsigned int count;/*计数器*/
	unsigned int i;
	char ch;
	char ch1;/*字符寄存器*/
	FILE * fp,*fp1;
	char sourcefilename[10];
	char destfilename[10];
	
	printf("please input sourcefilename:");
	scanf("%s",sourcefilename);
	if((fp=fopen(sourcefilename,"r+"))==NULL)
	{
		printf("cannot open file\n");
		exit(0);
	}
	printf("please input destfilename:");
	scanf("%s",destfilename);
	fp1=fopen(destfilename,"a+");

	ch=fgetc(fp);
	ch1=ch;
	count=1;
	while(!feof(fp))
	{
		ch=fgetc(fp);
		if(ch1==ch)	//找一样的,计数
		{
			count++;
			if(count<65535)
				continue;
			else	//在目标文件中插入一个@65536,再从头开始
			{
				fputc('@',fp1);
				fputc(ch,fp1);
				fprintf(fp1,"%d",count);
				fputc('#',fp1);
				ch=fgetc(fp);
				ch1=ch;
				count=1;
			}
		}
		else	//不一样
		{ 
			if(count<4)		//计数不到4,在目标文件中写入count个
			{
				for(i=1;i<=count;i++)
					fputc(ch1,fp1);
			}
			else		//计数大于4,写成ch1@count
			{ 
				fputc('@',fp1);
				fputc(ch1,fp1);
				fprintf(fp1,"%d",count);
				fputc('#',fp1);
			}
			ch1=ch;		//下一个接着来
			count=1;
		}
	}
	fclose(fp);
	fclose(fp1);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?