| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1400 人关注过本帖
标题:C语言求解压缩与结压问题
只看楼主 加入收藏
fangfangff
Rank: 1
等 级:新手上路
威 望:2
帖 子:479
专家分:0
注 册:2006-12-22
收藏
 问题点数:0 回复次数:14 
C语言求解压缩与结压问题

首先把一些字符输入到一个文件中,然后对里面的字符进行压缩和解压 用C语言编写程序来实现...

请各位帮帮忙哈!!!谢谢.........

搜索更多相关主题的帖子: C语言 求解 压缩 
2007-06-17 17:17
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 

交作业?
曾经写过一个
http://bbs.bc-cn.net/viewthread.php?tid=82126&star=at#

把里面那个改成二进制文件处理就行了

2007-06-17 22:00
fangfangff
Rank: 1
等 级:新手上路
威 望:2
帖 子:479
专家分:0
注 册:2006-12-22
收藏
得分:0 
谢谢你哈!!
你那个程序是怎么实现的啊!!
怎么好象都没有实现功能呢????
可以说说吗??????
好象有写函数也没有用处啊!!!

千里冰封---My Love 尽管相隔千里 , 依然拥有冰封
2007-06-17 22:53
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 

不太明白你的意思
那程序应该能正常运行 改一下文件使用方式就没问题了

2007-06-18 13:07
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 

不太明白你的意思
那程序应该能正常运行 改一下文件使用方式就没问题了

2007-06-18 13:53
fangfangff
Rank: 1
等 级:新手上路
威 望:2
帖 子:479
专家分:0
注 册:2006-12-22
收藏
得分:0 

#include <stdio.h>
#include<stdlib.h>
int reduce(char *file_name); //压缩一个文件
int dell_fill(char *file1_name,char *file2_name);//删除两个文件
int re_file(char *file1_name,char *file2_name);//解压缩两个文件

void main()
{
char *file_name="E:\\file.txt";

reduce(file_name);

puts("\nend!");

getchar();
}

int reduce(char *file_name)
{
FILE *fp,*fp1,*fp2;
long fnum=0;
int f=0,f_h=1,flag,i;
char *file1_name,*file2_name;


if((fp=fopen(file_name,"rb"))==NULL)
{
printf("Open the \"%s\" error!",file_name);
getchar();
exit(1);
}
i=0;
flag=0;
do
{
if(file_name[i]=='.')
{
file1_name[i]='a';
file1_name[i+1]='.';

file2_name[i]='b';
file2_name[i+1]='.';

flag=1;
}
else
{
file1_name[i+flag]=file_name[i];

file2_name[i+flag]=file_name[i];
}

}while(file_name[i++]!=0);

if(!flag)
{
file1_name[i]='a';

file2_name[i]='b';
}

if((fp1=fopen(file1_name,"w+"))==NULL)
{
printf("Creat the \"%s\" error!",file1_name);
getchar();
exit(1);
}

if((fp2=fopen(file2_name,"w+"))==NULL)
{
printf("Creat the \"%s\" error!",file2_name);
getchar();
exit(1);
}

f_h=fgetc(fp);
while(f!=-1)
{
f=fgetc(fp);
if(f_h==f)
{
fnum++; //解除长整形限制
}
else
{
do
{
fputc(fnum%256,fp1);
fputc(f_h,fp2);
}while(fnum/=256);
fnum=0;
}

f_h=f;
}

fclose(fp);
fclose(fp1);
fclose(fp2);

re_file(file1_name,file2_name);
dell_fill(file1_name,file2_name);
return 0;
}

int dell_fill(char *file1_name,char *file2_name)
{
unlink(file1_name);
unlink(file2_name);
return 0;
}

int re_file(char *file1_name,char *file2_name)
{
FILE *fp,*fp1,*fp2;
int f=0,f_h,i,flag;
char *file_name;

if((fp1=fopen(file1_name,"rb"))==NULL)
{
printf("Creat the \"%s\" error!",file1_name);
getchar();
exit(1);
}
if((fp2=fopen(file2_name,"rb"))==NULL)
{
printf("Creat the \"%s\" error!",file2_name);
getchar();
exit(1);
}

i=0;
flag=0;
do
{
if(file1_name[i]=='.')
{
file_name[i-1]='.';

flag=-1;
}
else
file_name[i+flag]=file1_name[i];

}while(file1_name[i++]!=0);

if(!flag)
file_name[i-1]=0;

if((fp=fopen("E:\\file.txt","wt"))==NULL)
{
printf("Creat the \"%s\" error!",file_name);
getchar();
exit(1);
}

while(f!=-1)
{
f=fgetc(fp1);
f_h=fgetc(fp2);
for(i=0;i<=f;i++)
{
fputc(f_h,fp);
}
}

fclose(fp);
fclose(fp1);
fclose(fp2);
return 0;
}

这个是你的杰作,你可以作一点注释吗???
我看不懂,怎么运行结束以后就是一个end.这样什么都没有了,
也没有实现压缩和解压的功能,还有里面的
int dell_fill(char *file1_name,char *file2_name);//删除两个文件
int re_file(char *file1_name,char *file2_name);//解压缩两个文件

这两个函数好象没有用处,不起作用.......
分析一下好吗???你觉得我将怎样改才可以啊
还有这里看不明白
do
{
if(file_name[i]=='.')
{
file1_name[i]='a';
file1_name[i+1]='.';

file2_name[i]='b';
file2_name[i+1]='.';

flag=1;
}
else
{
file1_name[i+flag]=file_name[i];

file2_name[i+flag]=file_name[i];
}

}while(file_name[i++]!=0);

if(!flag)
{
file1_name[i]='a';

file2_name[i]='b';
}


千里冰封---My Love 尽管相隔千里 , 依然拥有冰封
2007-06-18 14:44
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 
程序是为了实现文件的压缩与解压
输出自然就一个END就够了

现在有点忙 晚些给你写注释吧
2007-06-18 15:22
fangfangff
Rank: 1
等 级:新手上路
威 望:2
帖 子:479
专家分:0
注 册:2006-12-22
收藏
得分:0 
哦,最好是这两天好吗????
它是实现这个功能,但是怎么我运行以后没有实现啊!!
你原来的题目上面就是说输入2222然后压缩后变为42,但是好象没有啊
运行结束以后就生成了一个fil.txt,和原来的file.txt 的内容是一样的啊!!!
还有另外一个函数好象都没有什么用处呢????

千里冰封---My Love 尽管相隔千里 , 依然拥有冰封
2007-06-18 15:40
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 

#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
int reduce(char *file_name); //压缩一个文件
int dell_fill(char *file1_name,char *file2_name);//删除两个文件
int re_file(char *file1_name,char *file2_name);//解压缩两个文件

void main()
{
char *file_name="E:\\file.txt";

reduce(file_name);

puts("\nend!");

getchar();
}

int reduce(char *file_name)
{
FILE *fp,*fp1,*fp2;
long fnum=0;
int f=0,f_h=1,flag,i;
char *file1_name,*file2_name;

//打开预压缩文件
if((fp=fopen(file_name,"rb+"))==NULL)
{
printf("Open the \"%s\" error!",file_name);
getchar();
exit(1);
}
//处理压缩缓存文件名
i=0;
flag=0;
do
{
if(file_name[i]=='.')
{
file1_name[i]='a';
file1_name[i+1]='.';

file2_name[i]='b';
file2_name[i+1]='.';

flag=1;
}
else
{
file1_name[i+flag]=file_name[i];

file2_name[i+flag]=file_name[i];
}

}while(file_name[i++]!=0);

if(!flag)
{
file1_name[i]='a';

file2_name[i]='b';
}
//建立压缩缓存文件
if((fp1=fopen(file1_name,"wb+"))==NULL)
{
printf("Creat the \"%s\" error!",file1_name);
getchar();
exit(1);
}

if((fp2=fopen(file2_name,"wb+"))==NULL)
{
printf("Creat the \"%s\" error!",file2_name);
getchar();
exit(1);
}
//压缩文件
f_h=fgetc(fp);
while(f!=-1)
{
f=fgetc(fp);
if(f_h==f)
{
fnum++; //解除长整形限制
}
else
{
do
{
fputc(fnum%256,fp1);
fputc(f_h,fp2);
}while(fnum/=256);
fnum=0;
}

f_h=f;
}
//关闭文件
fclose(fp);
fclose(fp1);
fclose(fp2);

//解压文件
re_file(file1_name,file2_name);

return 0;
}

int dell_fill(char *file1_name,char *file2_name)
{
unlink(file1_name);
unlink(file2_name);
return 0;
}

int re_file(char *file1_name,char *file2_name)
{
FILE *fp,*fp1,*fp2;
int f=0,f_h,i,flag;
char *file_name;

//打开压缩缓存文件
if((fp1=fopen(file1_name,"rb+"))==NULL)
{
printf("Creat the \"%s\" error!",file1_name);
getchar();
exit(1);
}
if((fp2=fopen(file2_name,"rb+"))==NULL)
{
printf("Creat the \"%s\" error!",file2_name);
getchar();
exit(1);
}
//处理原文件名
i=0;
flag=0;
do
{
if(file1_name[i]=='.')
{
file_name[i-1]='.';

flag=-1;
}
else
file_name[i+flag]=file1_name[i];

}while(file1_name[i++]!=0);

if(!flag)
file_name[i-1]=0;
//建立原文件
if((fp=fopen("E:\\NewFile.txt","wb+"))==NULL)
{
printf("Creat the \"%s\" error!",file_name);
getchar();
exit(1);
}
//解压文件
while(f!=-1)
{
f=fgetc(fp1);
f_h=fgetc(fp2);
for(i=0;i<=f;i++)
{
fputc(f_h,fp);
}
}
//关闭文件
fclose(fp);
fclose(fp1);
fclose(fp2);
return 0;
}



哪里不懂回帖或者加我QQ说吧

2007-06-18 16:35
fangfangff
Rank: 1
等 级:新手上路
威 望:2
帖 子:479
专家分:0
注 册:2006-12-22
收藏
得分:0 
怎么这次有很大的问题呢???
就是不可以运行了啊!!!
好嘛
我加你QQ哈

千里冰封---My Love 尽管相隔千里 , 依然拥有冰封
2007-06-18 17:12
快速回复:C语言求解压缩与结压问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016844 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved