基於Huffman的C 解壓縮檔案程式

2021-06-21 14:53:09 字數 3057 閱讀 2943

//*******************************controll.h**********************

//*****************壓縮命令和解壓命令**********

#ifndef controll_h

#define controll_h

class controll //:public huffmantree

;#endif end

//*******************************huffman.h**********************

//*****************葉子結點為n的哈夫曼樹共有2n-1個結點**********

#ifndef huffman_h

#define huffman_h

class huffmannode

huffmannode(const char &data, const double &wt, const int &pa=-1, const int &lch=-1, const int &rch=-1)

}; //class huffmannode end

/*現在我把它調出來為的就是在controlll類當中使用這個類*/

class code

~code()

char *ptr;

const int length;

};class huffmantree

~huffmantree()

void run(const char*, const char*);

int getsumbytes();//定義待壓縮檔案的總bytes數

int currentsize; //當前陣列大小

huffmannode *arraytree; //哈夫曼結點陣列

code *codearray; //陣列大小為currentsize

int sum_bits;//定義壓縮後檔案的總bit數

private:

int maxsize; //陣列最大值

//int sum_bytes;

void insert(const char&, const double&); //插入結點

void createhuffmantree(); //建立哈夫曼樹

void createhuffmancode(); //建立哈夫曼編碼

void writecodetofile(const char *);//將huffman編碼寫入到詞頻表檔案當中

int findposition(const char &) const; //返回字元在arraytree中的位置

int isequal(const char *s) const; //判斷s是否存在於編碼系統中,若存在則返回s在編碼系統中的位置,否則返回-1

void reverse(char arr);

}; //class huffmantree end

#endif end

//**************************controll.cpp**********************

#include #include #include #include#include #include "controll.h"

#include "huffman.h"

using namespace std;

int controll::powmy(int a,int b)

printf("sum_bits=%d ",res[0]);

c = fgetc(fe); c = fgetc(fe);//頭乙個讀取#,後乙個才開始讀取資料

k = 0;

while(c!='#')

m = 0; res[1] = 0;

for(k=k-1;k>=0;k--)

printf("currentsize =%d\n",res[1]);

fclose(fe);

//果然是這個問題的原因導致的。 沒有關閉檔案會導致出錯

/* fclose(fe);

file *fww = fopen("c:\\out4.txt","wb");//開啟詞頻表檔案

for(i=0;i=8)

fflush(fw);

j = currentsize+1;

i = -1;}}

}if(i)

else

}sum_bit2 = 0;

printf("\r%4.2f%%",(double)(sum_bits-sum_bit2)/sum_bits*100.0);

fclose(fw);

fclose(fo);

}

//**************************huffman.cpp**********************

#include #include //for ofstream ifstream

#include //for numeric_limits::max()

#include //for exit()

#include //for strlen(), strcpy(), strcmp()

#include #include "huffman.h"

using namespace std;

void huffmantree::insert(const char &data, const double &wt)

/*將詞頻表存入相應的檔案當中*/

void huffmantree::writecodetofile(const char *outfilename)

int huffmantree::findposition(const char &ch) const

//執行解壓命令

else if(strcmp("-u",argv[1])==0)

return 0;

} end

C 壓縮和解壓縮

話不多說,直接上 最後有重要說明!哦對了,用的是icsharpcode.sharpziplib.zip 這個東西 壓縮 先宣告個全域性變數吧 附件打包的變數 zipoutputstream zos null 下面就是壓縮的 了 protected void btnfile click object ...

C 壓縮 解壓縮類

using system using system.collections.generic using system.text using system.io using icsharpcode.sharpziplib using icsharpcode.sharpziplib.zip using ...

c rar解壓大小 C 壓縮 解壓縮

1 2 壓縮檔案 fnamearry 為客戶端傳回來的檔案列表 檔名陣列,壓縮包的名稱strzipname3 4 檔名陣列 5 壓縮包的名稱 6 public void zipfile string fnamearry stringstrzipname 7 19 20 u.finish 結束壓縮 2...