﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-C++LAMP</title><link>http://www.cppblog.com/AlexandernanLee/</link><description>C++-&gt;LAMP</description><language>zh-cn</language><lastBuildDate>Sun, 05 Apr 2026 18:33:26 GMT</lastBuildDate><pubDate>Sun, 05 Apr 2026 18:33:26 GMT</pubDate><ttl>60</ttl><item><title>C++LAMP </title><link>http://www.cppblog.com/AlexandernanLee/archive/2011/11/30/161257.html</link><dc:creator>AlexanderNan</dc:creator><author>AlexanderNan</author><pubDate>Wed, 30 Nov 2011 15:04:00 GMT</pubDate><guid>http://www.cppblog.com/AlexandernanLee/archive/2011/11/30/161257.html</guid><wfw:comment>http://www.cppblog.com/AlexandernanLee/comments/161257.html</wfw:comment><comments>http://www.cppblog.com/AlexandernanLee/archive/2011/11/30/161257.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AlexandernanLee/comments/commentRss/161257.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AlexandernanLee/services/trackbacks/161257.html</trackback:ping><description><![CDATA[<h4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一次偶然的机会，看到了C++博客。欣喜万分之于就立刻注册了一个账号。希望自己真的能在这里得到知识的滋润。对于喜欢搞Linux的我来说以后的路还很漫长，也需要很多的技术和学习上的支持，这应该是我注册的初衷。Linux是我的最爱。至今，我认为，这是我喜欢的。除此我也在搞数据库（mySQL，Oracle）。</h4><p>我有个想法，那就是将开源与网络紧密结合，到底以什么形式结合，我希望在两年之后的今天能够得到答案。路漫漫其修远兮，吾将上下而求索！<br /></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: Comic Sans MS;">对，开源。我同时我也喜欢开源的东西，因为我也被UBUNTU的精神所鼓舞！</span><br /></p><img src ="http://www.cppblog.com/AlexandernanLee/aggbug/161257.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AlexandernanLee/" target="_blank">AlexanderNan</a> 2011-11-30 23:04 <a href="http://www.cppblog.com/AlexandernanLee/archive/2011/11/30/161257.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Huffman</title><link>http://www.cppblog.com/AlexandernanLee/archive/2011/11/30/161255.html</link><dc:creator>AlexanderNan</dc:creator><author>AlexanderNan</author><pubDate>Wed, 30 Nov 2011 14:55:00 GMT</pubDate><guid>http://www.cppblog.com/AlexandernanLee/archive/2011/11/30/161255.html</guid><wfw:comment>http://www.cppblog.com/AlexandernanLee/comments/161255.html</wfw:comment><comments>http://www.cppblog.com/AlexandernanLee/archive/2011/11/30/161255.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/AlexandernanLee/comments/commentRss/161255.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/AlexandernanLee/services/trackbacks/161255.html</trackback:ping><description><![CDATA[<div>/*************.h File**************/<br />#include &lt;string&gt;<br />#include &lt;iostream&gt;<br />#include &lt;fstream&gt;<br /><br />#ifndef HUFFMAN<br />#define HUFFMAN<br /><br />class Huffman<br />{<br />&nbsp;private:<br />&nbsp; /*** Node structure ***/<br />&nbsp; class BinNode<br />&nbsp; {<br />&nbsp;&nbsp; public:<br />&nbsp;&nbsp;&nbsp; char data;<br />&nbsp;&nbsp;&nbsp; BinNode * left,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * right;<br /><br />&nbsp;&nbsp;&nbsp; // BinNode constructor<br />&nbsp;&nbsp;&nbsp; BinNode(char item)<br />&nbsp;&nbsp;&nbsp; : data(item), left(0), right(0)<br />&nbsp;&nbsp;&nbsp; { }<br />&nbsp; };<br /><br />&nbsp; typedef BinNode * BinNodePointer;<br /><br />&nbsp;public:<br />&nbsp; /*** Function members ***/<br />&nbsp; Huffman();<br />&nbsp; <br />&nbsp;/******************************************************************/<br />void BuildDecodingTree(ifstream &amp; CodeFile);<br />&nbsp; <br />/ ******************************************************************<br />void Insert(char ch, string code);<br /><br />&nbsp;<br />/ ******************************************************************/<br />void Decode(ifstream &amp; in);<br /><br />&nbsp;<br />&nbsp;******************************************************************/<br />void PrintTree(ostream &amp; out, BinNodePointer root, int indent);<br /><br />&nbsp;<br />&nbsp;/******************************************************************/<br />void DisplayDecodingTree(ostream &amp; out);<br /><br />/*** Data members ***/<br />private:<br />&nbsp; BinNodePointer root;<br />};<br /><br />//--- Definition of consructor<br />inline Huffman::Huffman()<br />{ root = new BinNode('*'); }<br /><br />#endif<br />/****************.cpp File*********************/<br /><div>#include &lt;string&gt;<br />#include &lt;iostream&gt;<br />#include &lt;fstream&gt;<br />#include &lt;iomanip&gt;<br />using namespace std;<br /><br />#ifndef HUFFMAN<br />#define HUFFMAN<br /><br />class Huffman<br />{<br />private:<br />/*** Node structure ***/<br />struct BinNode<br />{<br />&nbsp; char data;<br />&nbsp; BinNode * left,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * right;<br /><br />&nbsp; // BinNode constructor<br />&nbsp; BinNode(char item)<br />&nbsp; {<br />&nbsp;&nbsp;&nbsp; data = item;<br />&nbsp;&nbsp;&nbsp; left = right = 0;<br />&nbsp; }<br />};<br /><br />typedef BinNode * BinNodePointer;<br /><br />/*** Function members ***/<br />public:<br />/* Constructor<br />&nbsp;*&nbsp; Precondition:&nbsp; A Huffman object has been declared.<br />&nbsp;*&nbsp; Postcondition: One-node binary tree with root node<br />&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pointed to by root has been created.<br />&nbsp;******************************************************************/<br />Huffman();<br /><br />/* Build the Huffman decoding tree.<br />&nbsp;*&nbsp; Receive:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Huffman object containing this function (implicitly)<br />&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fstream in<br />&nbsp;*&nbsp; Input:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Characters and their codes via in.<br />&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Last line of code file must contain *. <br />&nbsp;*&nbsp; Postcondition: Huffman decoding tree has been created with root<br />&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; node pointed to by root.<br />&nbsp;******************************************************************/<br />void BuildDecodingTree(ifstream &amp; CodeFile);<br /><br />/* Insert a node for a character in Huffman decoding tree.<br />&nbsp;*&nbsp; Receive:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char c and code, a bit string<br />&nbsp;*&nbsp; Postcondition: Node containing c has been inserted into<br />&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Huffman tree with root pointed to by root.<br />&nbsp;******************************************************************/<br />void Insert(char ch, string code);<br /><br />/* Read a message (string of bits) from a file and decode it<br />&nbsp;* using the huffman decoding tree.<br />&nbsp;*&nbsp; Receive:&nbsp;&nbsp; Huffman object containing this function (implicitly)<br />&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fstream in connected to message file<br />&nbsp;*&nbsp; Input:&nbsp;&nbsp;&nbsp;&nbsp; Message via in<br />&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Last line of message file must contain *.<br />&nbsp;*&nbsp; Output:&nbsp;&nbsp;&nbsp; Decoded message<br />&nbsp;******************************************************************/<br />void Decode(ifstream &amp; in);<br /><br />/* --- A binary tree printer<br />&nbsp;* Displays a binary tree recursively.&nbsp; The tree is displayed<br />&nbsp;* "on its side" with each level&nbsp; indented by a specified value<br />&nbsp;* Indent, but with&nbsp; no arcs sketched in.<br />&nbsp;*&nbsp; Receive: Root of binary tree and integer indent<br />&nbsp;*&nbsp; Output:&nbsp; Graphical representation of the binary tree<br />&nbsp;******************************************************************/<br />void PrintTree(ostream &amp; out, BinNodePointer root, int indent);<br /><br />/* Display the decoding tree<br />&nbsp;*&nbsp; Receive: Huffman object containing this function (implicitly)<br />&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ostream out<br />&nbsp;*&nbsp; Output:&nbsp; The decoding tree via PrintTree()<br />&nbsp;******************************************************************/<br />void DisplayDecodingTree(ostream &amp; out);<br /><br />/*** Data members ***/<br />private:<br />&nbsp; BinNodePointer root;<br />};<br /><br />//--- Definition of consructor<br />inline Huffman::Huffman()<br />{ root = new BinNode('*'); }<br /><br />//--- Definition of BuildDecodingTree()<br />void Huffman::BuildDecodingTree(ifstream &amp; in)<br />{<br />&nbsp; char ch;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // a character<br />&nbsp; string code;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // its code<br />&nbsp; for (;;)<br />&nbsp; {<br />&nbsp;&nbsp;&nbsp; in &gt;&gt; ch &gt;&gt; code;<br />&nbsp;&nbsp;&nbsp; if (ch == '*') return;<br />&nbsp;&nbsp;&nbsp; Insert(ch, code);<br />&nbsp; }<br />}<br /><br />//--- Definition of Insert()<br />void Huffman::Insert(char ch, string code)<br />{<br />&nbsp; Huffman::BinNodePointer p = root;&nbsp;&nbsp; // pointer to move down the tree<br /><br />&nbsp; for(int i = 0; i &lt; code.length(); i++)<br />&nbsp; {<br />&nbsp;&nbsp;&nbsp; switch (code[i])<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '0' :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // descend left<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (p-&gt;left == 0)&nbsp; // create node along path<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p-&gt;left = new Huffman::BinNode('*');<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p = p-&gt;left;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '1' :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // descend right<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (p-&gt;right == 0) // create node along path<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p-&gt;right = new Huffman::BinNode('*');<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p = p-&gt;right;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "*** Illegal character in code ***\n";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit(-1);<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp; }<br />&nbsp; p-&gt;data = ch;<br />}<br /><br />//--- Definition of Decode()<br />void Huffman::Decode(ifstream &amp; in)<br />{<br />&nbsp; char bit;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // next message bit<br />&nbsp; Huffman::BinNodePointer p; // pointer to trace path in decoding tree<br /><br />&nbsp; for(;;)<br />&nbsp; {<br />&nbsp;&nbsp;&nbsp; p = root;<br />&nbsp;&nbsp;&nbsp; while (p-&gt;left != 0 || p-&gt;right != 0)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in &gt;&gt; bit;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (bit == '*') return;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; bit;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (bit == '0')<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p = p-&gt;left;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (bit == '1')<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p = p-&gt;right;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "Illegal bit: " &lt;&lt; bit &lt;&lt; " -- ignored\n";<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; cout &lt;&lt; "--" &lt;&lt; p-&gt;data &lt;&lt; endl;<br />&nbsp; }<br />}<br /><br />//--- Definition of PrintTree()<br />void Huffman::PrintTree(ostream &amp; out, Huffman::BinNodePointer root,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int indent)<br />{<br />&nbsp; if (root != 0)<br />&nbsp; {<br />&nbsp;&nbsp;&nbsp; PrintTree(out, root-&gt;right, indent + 8);<br />&nbsp;&nbsp;&nbsp; out &lt;&lt; setw(indent) &lt;&lt; " " &lt;&lt; root-&gt;data &lt;&lt; endl;<br />&nbsp;&nbsp;&nbsp; PrintTree(out, root-&gt;left, indent + 8);<br />&nbsp; }<br />}<br /><br />//--- Definition of DisplayDecodingTree()<br />inline void Huffman::DisplayDecodingTree(ostream &amp; out)<br />{ PrintTree(out, root, 0); }<br /><br />#endif<br /></div>/*******************main.cpp***********************/<br /><div>//--- Driver Program ---<br />#include "Huffman"<br />#include &lt;iostream&gt;<br />#include &lt;fstream&gt;<br /><br />int main()<br />{<br />&nbsp; char filename[32];<br />&nbsp; cout &lt;&lt; "Enter name of code file: ";&nbsp; cin &gt;&gt; filename;<br />&nbsp; ifstream codestream(filename);<br />&nbsp; if (!codestream.is_open())<br />&nbsp; {<br />&nbsp;&nbsp;&nbsp; cout &lt;&lt; "Cannot open code file.\n";<br />&nbsp;&nbsp;&nbsp; exit(-1);<br />&nbsp; }<br /><br />&nbsp; Huffman h;<br />&nbsp; h.BuildDecodingTree(codestream);<br />&nbsp; h.DisplayDecodingTree(cout);<br />&nbsp; cout &lt;&lt; endl &lt;&lt; endl;<br />&nbsp; <br />&nbsp; cout &lt;&lt; "Enter name of message file: ";&nbsp; cin &gt;&gt; filename;<br />&nbsp; ifstream message(filename);<br />&nbsp; if (!message.is_open())<br />&nbsp; {<br />&nbsp;&nbsp;&nbsp; cout &lt;&lt; "Cannot open message file.\n";<br />&nbsp;&nbsp;&nbsp; exit(-1);<br />&nbsp; }<br />&nbsp; h.Decode(message);<br />}<br /></div><h4><br /></h4></div><img src ="http://www.cppblog.com/AlexandernanLee/aggbug/161255.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/AlexandernanLee/" target="_blank">AlexanderNan</a> 2011-11-30 22:55 <a href="http://www.cppblog.com/AlexandernanLee/archive/2011/11/30/161255.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>