using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace ConsoleApplication1 { class Program { static void Main(string[] args) { string input; Console.Write("Enter a string to encode: "); input = Console.ReadLine(); TreeList treeList = new TreeList(); foreach (int v in input) { treeList.AddLetter(input); } treeList.SortTree(); int[] signTable = new int[input.Length]; int[] keyTable = new int[input.Length]; while (treeList.length > 1) treeList.MergeTree(); MakeKey(treeList.RemoveTree(), ""); string newStr = translate(input); for (int i = 0; i <= signTable.Length - 1; i++) Console.WriteLine(signTable[i] + ": " + keyTable[i]); Console.WriteLine("The original string is " + input. Length * 16 + " bits long."); Console.WriteLine("The new string is " + newStr.Length + " bits long."); Console.WriteLine("The coded string looks like this:" + newStr); translate(input, signTable);
} static string translate(string original,int []signTable) { string newStr = ""; for (int i = 0; i <= original.Length - 1; i++) for (int j = 0; j <= signTable.Length - 1; j++) if (original[i] == signTable[j]) newStr += keyTable[j]; return newStr; } static void MakeKey(HuffmanTree tree, string code) { int pos = 0; if (tree.GetLeftChild == null) { signTable[pos] = tree.GetSign(); keyTable[pos] = code; pos++; } else { MakeKey(tree.GetLeftChild, code + "0"); MakeKey(tree.GetRightChild, code + "1"); } } } } |