This Hufffman using encoding and decoding of characters through iterating within a file of text
//in the name of allah
#include
#include
#include
#include"code_char.h"
#include"heap_class.h"
#include"heap.h"
using namespace std;
int paus;
bool read_file(char* en_words,int *number,list
fstream file;
file.open(en_words,ios::in);
if(!file)
return false;
//code_ch *w=new code_ch[200];
file.seekg(0,ios::end);
int end=file.tellg();
file.seekg(0,ios::beg);
int i=0;
char ch;
while(i
file.seekg(i,ios::beg);
file.read((char*)&ch,1);
i++;
//if(ch=='\n' || ch=='\13')
//continue;
// if(ch=='\13')
// continue;
if(!number[ch]){//if is not yet inserted to list
code_ch *tmp=new code_ch;
number[ch]++;
tmp->ch=ch;
tmp->number=number[ch];//later we update this
w->push_back(*tmp);//w->push_front(tmp);///
}
else
number[ch]++;
}
//updateing the numbers
list
while(p!=w->end()){ ///point
p->number=number[p->ch];
p++;
}
//copy(w->begin(),w->end(),ostream_iterator
return true;
}
code_ch * huffman(PQueue
code_ch *x;//=new code_ch;
code_ch *y;//=new code_ch;
for(int i=1;i
code_ch *z=new code_ch;
z->left=x=&p.extractMin();
z->right=y=&p.extractMin();
z->number=x->number+y->number;
p.insert(z);
}
return &p.extractMin();
}
//this function finds the code of eeach element in the huffman tree that i create.
void find_code(code_ch *h,int i=-1){///h is root
i++;
if(h->left!=NULL){
for(int k=0;k
if(h->code[0][k])
h->left->code[0][k]=true;
else
h->left->code[0][k]=false;
}
h->left->code[0][i]=false;
h->left->code_length=h->code_length+1;
find_code(h->left,i);
}
if(h->right!=NULL){
for(int k=0;k
if(h->code[0][k])
h->right->code[0][k]=true;
else
h->right->code[0][k]=false;
}
h->right->code[0][i]=true;
h->right->code_length=h->code_length+1;
find_code(h->right,i);
}
}
//this function "mirizad" tree in an array for useing when encodeing from file for each character we can find the element in the tree easily.
code_ch ** inar(code_ch *root){//,int tree_size){
static code_ch **l=new code_ch*[200];//l[197] points to an element in the tree that its character is 'a'
l[root->ch]=root;
if(root->left!=NULL)
inar(root->left);//,tree_size);
if(root->right!=NULL)
inar(root->right);//,tree_size);
return l;
}
int get_size(code_ch *root){//returns number of bits
static int size=0;
if(root->left!=NULL)
get_size(root->left);
if(root->right!=NULL)
get_size(root->right);
if(!root->left || !root->right)
size+=root->number*root->code_length;
return size;//this is number of bits
}
void encodeing(code_ch *root,char * en_file,code_ch **Arcode,int size){
//cout<<"coming in incodeing"<
fstream rfile,wfile;
rfile.open(en_file,ios::in);
wfile.open("encoded.txt",ios::out);
if(!rfile || !wfile)
throw runtime_error("cannot open the files...\n");
rfile.seekg(0,ios::end);
int end=rfile.tellg();
rfile.seekg(0,ios::beg);
int i=0,seek=0,j=0;
char ch;
//cout<<"declaring A"<
bitArray A(size);
//cout<<"this is size="<
//cout<<"after"<
while(i
rfile.seekg(i,ios::beg);
rfile.read((char*)&ch,1);
//cout<
//cout<<" "<
for(j=0;j
//cout<<" j="<
if(Arcode[ch]->code[0][j]){//if true
//cout<<1;
//cout<<" "<<1<<" ";
A[j+seek]=true;
}
else{
//cout<<0;
//cout<<" 0 ";;
A[j+seek]=false;
}
}
seek+=j;
//cout<
//cout<
i++;
}
i=0;
while(i<=size/8+1){
ch=(char)A.a[i];
wfile.seekp(i,ios::beg);
wfile.write(&ch,1);
i++;
}
//wfile.write((char*)&A.a,size/8+1); ///point
//cout<<"in file:"<
wfile.close();
rfile.close();
//cout<<"file closed"<
}
void inorderWalk(code_ch *root){
if(root->left!=NULL)
inorderWalk(root->left);
cout<
if(root->right!=NULL)
inorderWalk(root->right);
}
void decoding(code_ch *root,int size){//very simple only read from file and if 0 go to left else go to right
//cout<<"coming into decodig"<
//cout<<"--------------------------------------------------size="<
code_ch *p=root;
fstream rfile,wfile;
rfile.open("encoded.txt",ios::in);
wfile.open("decoded.txt",ios::out);
//cout<<"after openning the files"<
if(!rfile || !wfile)
throw runtime_error("cannot open the files...\n");
rfile.seekg(0,ios::end);
int end=rfile.tellg();
rfile.seekg(0,ios::beg);
int i=0,j=0;
char ch;
//cout<<"before declaring A"<
//cout<<"--------------------------------------------------size="<
bitArray A(size);
//cout<<"--------------------------------------------------size="<
//cout<<5<
//cout<<"root hehhhhhhhhhhhhhere :"<
//cout<<"--------------------------------------------------size="<
i=0;
while(i<=size/8+1){
rfile.seekg(i,ios::beg);
rfile.read(&ch,1);
A.a[i]=(unsigned char)ch;
i++;
}
rfile.seekg(0,ios::beg);
i=0;
while(i<=size){//while(!file.eof()){
//cout<<"in while"<
if(A[i]){//if it is true go to right
//cout<<1;
if(p->right!=NULL)
p=p->right;
else {
wfile.seekp(j,ios::beg);
wfile.write((char*)&p->ch,1);
j++;
p=root;
continue;///point
}
}
else{
//cout<<"--------------before else"<
//cout<<0;
if(p->left!=NULL){
//cout<<"in if of else"<
p=p->left;
}
else {
//cout<<"in else of it"<
wfile.seekp(j,ios::beg);
wfile.write((char*)&p->ch,1);
j++;
p=root;
continue;///point
}
}
i++;
}
// cout<<9<
rfile.close();
wfile.close();
//cout<<10<
}
int main(int argc,char **argv){
if(argc==1){
cout<<"you haven't entered a file! exiting..."<
return 1;
}
list
int *a=new int [200];//for saving the number of each ch
for(int i=0;i<200;i++)
a[i]=0;
bool is_read=read_file(argv[1],a,&w);
if(!is_read)
throw runtime_error("cannot open the file you entered...\n");
//cout<<"and the heap"<
PQueue
code_ch *root=huffman(p,w.size());
find_code(root);
int size=get_size(root);
//cout<<"this is size in the main:"<
code_ch ** Arcode=inar(root);//,int tree_size);
char *coded;
//cout<<"first puase:"<
//cin>>paus;
int paus1;
encodeing(root,argv[1],Arcode,size);//encodeing(root,argv[1],Arcode,size);
//cout<<" puase2:"<
//cin>>paus;
decoding(root,size);
cout<<"tamam"<
//cout<
return 0;
}
moncler, moncler outlet, links of london, bottes ugg, moncler, moncler, doudoune canada goose, sac louis vuitton pas cher, juicy couture outlet, canada goose, moncler, pandora charms, pandora charms, replica watches, louis vuitton, pandora jewelry, lancel, canada goose, louis vuitton, ugg boots uk, swarovski, louis vuitton, canada goose uk, wedding dresses, moncler, ugg,uggs,uggs canada, hollister, supra shoes, juicy couture outlet, toms shoes, canada goose outlet, ugg pas cher, montre pas cher, canada goose, moncler, karen millen, swarovski crystal, louis vuitton, pandora jewelry, ugg,ugg australia,ugg italia, marc jacobs, thomas sabo, coach outlet, moncler, canada goose, canada goose outlet
ReplyDeleteoakley sunglasses, polo ralph lauren outlet, tiffany jewelry, nike roshe run, louboutin pas cher, tiffany and co, kate spade outlet, oakley sunglasses, oakley sunglasses, nike free, louboutin outlet, prada outlet, christian louboutin outlet, tory burch outlet, ray ban sunglasses, jordan shoes, louis vuitton, longchamp outlet, ralph lauren pas cher, louis vuitton outlet, ugg boots, longchamp pas cher, ray ban sunglasses, oakley sunglasses, replica watches, polo ralph lauren outlet, uggs on sale, air max, louis vuitton outlet, michael kors, louis vuitton, prada handbags, longchamp, nike free, chanel handbags, sac longchamp, burberry, louis vuitton, nike air max, gucci outlet, nike outlet, louboutin, ugg boots, nike air max, replica watches, air jordan pas cher, ray ban sunglasses, louboutin shoes, longchamp outlet, cheap oakley sunglasses
ReplyDeletenike air max, hermes, oakley pas cher, burberry, coach outlet, coach outlet, lululemon, new balance pas cher, ugg boots, replica handbags, lacoste pas cher, vans pas cher, true religion jeans, michael kors, burberry outlet online, converse pas cher, true religion jeans, michael kors, hogan, sac guess, tn pas cher, coach purses, michael kors outlet, abercrombie and fitch, nike free run uk, michael kors, hollister pas cher, true religion outlet, kate spade handbags, vanessa bruno, timberland, ugg boots, nike air max, michael kors, north face, mulberry, north face, michael kors outlet, nike blazer, michael kors outlet, nike roshe, ralph lauren uk, michael kors outlet, air force, ray ban uk, nike air max, michael kors outlet, hollister, true religion jeans, ray ban pas cher
ReplyDeletejimmy choo shoes, converse outlet, north face outlet, insanity workout, soccer jerseys, wedding dresses, nike air max, ralph lauren, mcm handbags, oakley, hollister, lululemon, mont blanc, valentino shoes, vans shoes, vans, abercrombie and fitch, nike huarache, new balance, hollister, bottega veneta, nike trainers, birkin bag, celine handbags, ghd, soccer shoes, asics running shoes, instyler, timberland boots, beats by dre, nfl jerseys, converse, reebok shoes, nike roshe, hollister, ferragamo shoes, p90x workout, gucci, louboutin, north face outlet, iphone cases, babyliss, chi flat iron, baseball bats, longchamp, ray ban, nike air max, herve leger, mac cosmetics
ReplyDeletehttp://www.prokr.net/2016/09/pest-control-companies-24.html
ReplyDeletehttp://www.prokr.net/2016/09/pest-control-companies-23.html
http://www.prokr.net/2016/09/pest-control-companies-22.html
http://www.prokr.net/2016/09/pest-control-companies-21.html
http://www.prokr.net/2016/09/pest-control-companies-19.html
http://www.prokr.net/2016/09/pest-control-companies-18.html