Question: In C++ read.cpp #include #include using namespace std; int main(int argc, char *argv[]){ unsigned char ch; ifstream in(argv[1],ios::in|ios::binary|ios::ate); size_t size = 0; // here size

In C++

In C++ read.cpp #include #include using namespace std; int main(int argc, char

read.cpp

#include #include using namespace std; int main(int argc, char *argv[]){ unsigned char ch; ifstream in(argv[1],ios::in|ios::binary|ios::ate); size_t size = 0; // here size = in.tellg() ; // get the length of the file cout

decode.cpp

#include #include using namespace std; struct treenode { unsigned char data; treenode *left, *right; };

int strchr(unsigned char s[], unsigned char c) { int i=0; while(s[i]!=c) i++; return i; }

treenode * treebuild(unsigned char pre[], unsigned char in[], int & pos, int size) { if (size==pos) return NULL; treenode *t = new treenode; t->data = pre[pos]; t->left = NULL; t->right = NULL; int loc = strchr(in, pre[pos++]); in[loc] = 0; if (loc > 0 && in[loc-1] != 0) t->left = treebuild(pre, in, pos, size); if (loc right = treebuild(pre,in,pos, size); return t; }

void parse(string c, treenode *t) { treenode *p = t; for(int pos=0; pos left : p->right; if (p->left == NULL) { cout data; p = t; } } }

int main(int argc, char* argv[]) { ifstream prefile(argv[1],ios::in|ios::binary|ios::ate), infile(argv[2],ios::in|ios::binary), codefile(argv[3]); size_t size = 0; // here size = prefile.tellg() ; // get the length of the file prefile.seekg(0, ios::beg); // set the pointer to the beginning unsigned char *pre = new unsigned char[size], *in = new unsigned char[size]; for (int i =0; i

decodebin.cpp

#include #include using namespace std; struct treenode { unsigned char data; treenode *left, *right; };

int strchr(unsigned char s[], unsigned char c) { int i=0; while(s[i]!=c) i++; return i; }

treenode * treebuild(unsigned char pre[], unsigned char in[], int & pos, int size) { if (size==pos) return NULL; treenode *t = new treenode; t->data = pre[pos]; t->left = NULL; t->right = NULL; int loc = strchr(in, pre[pos++]); in[loc] = 0; if (loc > 0 && in[loc-1] != 0) t->left = treebuild(pre, in, pos, size); if (loc right = treebuild(pre,in,pos, size); return t; }

void parse(string c, treenode *t,short count) { treenode *p = t; for(int pos=0; pos left : p->right; if (p->left == NULL) { cout data; p = t; if(--count == 0) return; } } }

int main(int argc, char* argv[]) { ifstream prefile(argv[1],ios::in|ios::binary|ios::ate), infile(argv[2],ios::in|ios::binary), codefile(argv[3],ios::in|ios::binary|ios::ate); size_t size = 0; // here size = prefile.tellg() ; // get the length of the file prefile.seekg(0, ios::beg); // set the pointer to the beginning unsigned char *pre = new unsigned char[size], *in = new unsigned char[size]; for (int i =0; i(&count),2); for (int i=0; i>=1; } } parse(code,tree,count); cout Example Suppose that the file "foo.txt" contains the following text: ALLALABAMAFOOTBALL Huffman Code Trees Then executing: encode foo.txt should produce output flles such as the folloing. Note that this is only an example of a correct output. The tree and codes produced by your program would likely be different You are to write a program that reads a plain text file, computes a Huffman code tree for that text file, and writes out the encoded version ofthe text .Your program should read the text from the file given as a command-line . You should compute the number of occurrences of each character in the file, . You should build a min-heap contatntngthese nodes argument. and each character Cand lts frequency) should be placed In a new tree node preorder contains the bytes (note that these arethe VALUES of the bytes in the flle to see this output, run readon your file): 133 132 076 065 131 130 066 079 129 128 084 07O 077 Build the Huffman Code Tree using the heap. As you create neintnal nodes, give them a unique character label, using values 128 and greater. Write the pre order traversal of the Huffman code tree to the file "preorder" and the in-order traversal to the fle "inorder". Writethe byte value for each node in the traversal. The internal nodes will have values greater than 127 and the leaves will have values less thn 128. Write unsigned char values using the put(int) method. inorder contains the bytes(see note above): 076 132 065 133 066 130 079 131 084 128 070 129 077 code.txt contains: 010000010001100011110111011011011100100010000 .Construct a table contatning the encoding for each character, storlng the encoding as a string. .Encode the original text, writing the encoded verston to "code.txt". This flle should be ASCII 'O, and . 1' characters (much easier to debug) 5 honus points) also create a true binary version of the encoded text, writing it to "code.bin". In the btnary file, use the first two bytes to indicate the number of characters in the text. Ifthe last character does not finish a hyte then pad the last byte with 0's. Requirenents: . You should build all the data structures that you use yourself. You must create a binary heap data structure that uses an array and implements insert andexct-in that run in OUg N) time. . The only include files allowed are iostream and fstream Your makefile should build the executable namned "encode . Zip all ofyour source code and makefile into a single zip file for submission You must use good object based organization, ie. use classes in an appropriate way

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!