主题:[原创]压缩文件的问题,求救!!
/*========================================*/
/* 课题[3]哈夫曼编码实现文件的压缩功能 */
/* */
/* */
/*========================================*/
#include<stdio.h> //包含头文件
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<iostream.h>
#define MAX_SINGLECODE 10 //单个字符最大码长
#define MAX_STRING 10000 //要编码的字符串的最大长度
#define MAX_CODESTRING 50000 //产生的二进制码的最大长度
#define MAX_WORDS 1000 //要编码的字符串中字符种数最大值
#define END_TREE 30000 //树部分存储的结束符
#define PATH 50 //路径的最大字符
/*======数据结构定义部分======*/
/*哈夫曼树结构定义,其中的next域用于链表的操作*/
typedef struct Huffmantree
{
char ch; //字符部分
int weight; //结点权值
int mark; //标记是否加入树中
struct Huffmantree *parent,*lchild,*rchild,*next;
}HTNode,*LinkTree;
/*****编码字典结构定义*****/
typedef struct //ch为字符值,code[]为该字符的哈夫曼编码
{
char ch; //字符部分
char code[MAX_SINGLECODE]; //编码部分
}CodeDictionary;
/*======子函数======*/
/*===================压缩功能实现部分=====================*/
/*功能:读取.TXT文件并将其中的字符中保存到string[]中*/
void readFile(char *string)
{
FILE *fp;
int i;
char ch; //记录读入的字符
char path[PATH]; //文本文件的读路径
cout<<"请输入要压缩的.txt文件地址:(无需扩展名)"<<endl;
gets(path);
if((fp=fopen(strcat(path,".txt"),"r"))==NULL) //只读方式打开一个文件
{
cout<<"\n路径不正确!\n"<<endl;
getch();
return;
}
ch=fgetc(fp); //循环将文件内的字符输入到数组string[]中
for(i=0;ch!=EOF;i++)
{
string[i]=ch;
ch=fgetc(fp);
}
string[i]='\0'; //数组末尾加上结束标志'\o'
fclose(fp);
}
/* 课题[3]哈夫曼编码实现文件的压缩功能 */
/* */
/* */
/*========================================*/
#include<stdio.h> //包含头文件
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<iostream.h>
#define MAX_SINGLECODE 10 //单个字符最大码长
#define MAX_STRING 10000 //要编码的字符串的最大长度
#define MAX_CODESTRING 50000 //产生的二进制码的最大长度
#define MAX_WORDS 1000 //要编码的字符串中字符种数最大值
#define END_TREE 30000 //树部分存储的结束符
#define PATH 50 //路径的最大字符
/*======数据结构定义部分======*/
/*哈夫曼树结构定义,其中的next域用于链表的操作*/
typedef struct Huffmantree
{
char ch; //字符部分
int weight; //结点权值
int mark; //标记是否加入树中
struct Huffmantree *parent,*lchild,*rchild,*next;
}HTNode,*LinkTree;
/*****编码字典结构定义*****/
typedef struct //ch为字符值,code[]为该字符的哈夫曼编码
{
char ch; //字符部分
char code[MAX_SINGLECODE]; //编码部分
}CodeDictionary;
/*======子函数======*/
/*===================压缩功能实现部分=====================*/
/*功能:读取.TXT文件并将其中的字符中保存到string[]中*/
void readFile(char *string)
{
FILE *fp;
int i;
char ch; //记录读入的字符
char path[PATH]; //文本文件的读路径
cout<<"请输入要压缩的.txt文件地址:(无需扩展名)"<<endl;
gets(path);
if((fp=fopen(strcat(path,".txt"),"r"))==NULL) //只读方式打开一个文件
{
cout<<"\n路径不正确!\n"<<endl;
getch();
return;
}
ch=fgetc(fp); //循环将文件内的字符输入到数组string[]中
for(i=0;ch!=EOF;i++)
{
string[i]=ch;
ch=fgetc(fp);
}
string[i]='\0'; //数组末尾加上结束标志'\o'
fclose(fp);
}