cLZW.cs: #undef debug #define debugdisplay #undef debugdictionary using System; using System.Collections; namespace LZW ... { public class cLZW ...{ Constrcut#region Constrcut public cLZW() ...{ } #endregion Coding#region Coding public string InCharStream ...{ set ...{ _InCharStream = value; } get ...{ return _InCharStream; } } public ArrayList CodingCodeStream ...{ get ...{ return _CodingCodeStream; } } public ArrayList CodingDictionary ...{ get ...{ return _CodingDictionary; } } private void InitCodingDictionary() ...{ _CodingDictionary.Clear();#if debug _CodingDictionary.Add("A"); _CodingDictionary.Add("B"); _CodingDictionary.Add("C");#else for (int i = 0; i < 256; i++) ...{ _CodingDictionary.Add((char)i); }#endif } private void AddCodingDictionary(object str) ...{ _CodingDictionary.Add(str); } private void AddCodingCodeStream(object str) ...{ _CodingCodeStream.Add(str); } private bool ISInCodingDictionary(string Prefix) ...{ bool result = false; int count = _CodingDictionary.Count; for (int i = 0; i < count; i++) ...{ string temp = _CodingDictionary[i].ToString(); if (temp.IndexOf(Prefix) >= 0) ...{ result = true; break; } } return result; } private string GetIndexCodingDictionary(string Prefix) ...{ string result = "0"; int count = _CodingDictionary.Count; for (int i = 0; i < count; i++) ...{ string temp = _CodingDictionary[i].ToString(); if (temp.IndexOf(Prefix) >= 0) ...{ result = Convert.ToString(i + 1); break; } } return result; } private void DisplayCodingCodeStream() ...{ System.Console.WriteLine("*********_CodingCodeStream************"); for (int i = 0; i < _CodingCodeStream.Count; i++) ...{ System.Console.WriteLine(_CodingCodeStream[i].ToString()); } } private void DisplayCodingDictionary() ...{ System.Console.WriteLine("*********_CodingDictionary************"); for (int i = 0; i < _CodingDictionary.Count; i++) ...{ System.Console.WriteLine(_CodingDictionary[i].ToString()); } } private void DisplayInCharStream() ...{ System.Console.WriteLine("*********_InCharStream************"); System.Console.WriteLine(_InCharStream); } private void InitCodingCodeStream() ...{ _CodingCodeStream.Clear(); } private ArrayList _CodingDictionary = new ArrayList(); private string _InCharStream = ""; private ArrayList _CodingCodeStream = new ArrayList(); public void Coding() ...{ string Prefix = ""; string c = ""; string PrefixIndex = "0"; int count = _InCharStream.Length; if (count == 0) return; InitCodingDictionary(); InitCodingCodeStream(); Prefix = _InCharStream[0].ToString(); for (int i = 1; i < count; i++) ...{ c = _InCharStream[i].ToString(); if (ISInCodingDictionary(Prefix + c)) ...{ Prefix += c; } else ...{ PrefixIndex = GetIndexCodingDictionary(Prefix); AddCodingCodeStream(PrefixIndex); AddCodingDictionary(Prefix + c); Prefix = c; } } PrefixIndex = GetIndexCodingDictionary(Prefix); AddCodingCodeStream(PrefixIndex);#if debugdisplay DisplayInCharStream(); DisplayCodingCodeStream();#if debugdictionary DisplayCodingDictionary();#endif#endif } #endregion Decode#region Decode private ArrayList _DeCodeDictionary = new ArrayList(); private ArrayList _OutCharStream = new ArrayList(); private int[] _DeCodeCodeStream; public void SetDeCodeSCodetream(int[] obj) ...{ int count = obj.Length; _DeCodeCodeStream = new int[count]; for (int i = 0; i < count; i++) ...{ _DeCodeCodeStream[i] = obj[i]; } } public void SetDeCodeSCodetream(ArrayList obj) ...{ int count = obj.Count; _DeCodeCodeStream = new int[count]; for (int i = 0; i < count; i++) ...{ _DeCodeCodeStream[i] = System.Convert.ToInt32(obj[i]); } } public int[] GetDeCodeCodeStream() ...{ return _DeCodeCodeStream; } public string OutCharStream ...{ get ...{ string result = ""; for (int i = 0, count = _OutCharStream.Count; i < count; i++) ...{ result += _OutCharStream[i].ToString(); } return result; } } public ArrayList DeCodeDictionary ...{ get ...{ return _DeCodeDictionary; } } private void InitDeCodeDictionary() ...{ _DeCodeDictionary.Clear();#if debug _DeCodeDictionary.Add("A"); _DeCodeDictionary.Add("B"); _DeCodeDictionary.Add("C");#else for (int i = 0; i < 256; i++) ...{ _DeCodeDictionary.Add((char)i); }#endif } private void InitOutCharStream() ...{ _OutCharStream.Clear(); } private void DisplayOutCharStream() ...{ System.Console.WriteLine("*********_OutCharStream************"); string temp = ""; for (int i = 0; i < _OutCharStream.Count; i++) ...{ temp = temp + (_OutCharStream[i].ToString()); } System.Console.WriteLine(temp); } private void DisplayDeCodeDictionary() ...{ System.Console.WriteLine("*********_DeCodeDictionary************"); for (int i = 0; i < _DeCodeDictionary.Count; i++) ...{ System.Console.WriteLine(_DeCodeDictionary[i].ToString()); } } private void DisplayDeCodeCodeStream() ...{ System.Console.WriteLine("*********_DeCodeCodeStream************"); int count = _DeCodeCodeStream.Length; for (int i = 0; i < count; i++) ...{ System.Console.WriteLine("{0}", _DeCodeCodeStream[i]); } } private void AddOutCharStream(object str) ...{ _OutCharStream.Add(str); } private void AddDeCodeDictionary(object str) ...{ _DeCodeDictionary.Add(str); } private bool ISInDeCodeDictionary(int cw) ...{ bool result = false; int count = _DeCodeDictionary.Count; if (cw <= count - 1) ...{ result = true; } return result; } public void Decode() ...{ InitDeCodeDictionary(); InitOutCharStream(); int cw = 0; int pw = 0; string Prefix = ""; string c = ""; cw = _DeCodeCodeStream[0] - 1; this.AddOutCharStream(this._DeCodeDictionary[cw]); pw = cw; int count = _DeCodeCodeStream.Length; if (count == 0) return; for (int i = 1; i < count; i++) ...{ cw = _DeCodeCodeStream[i] - 1; if (ISInDeCodeDictionary(cw)) ...{ this.AddOutCharStream(this._DeCodeDictionary[cw]); Prefix = this._DeCodeDictionary[pw].ToString(); c = (this._DeCodeDictionary[cw].ToString())[0].ToString(); this.AddDeCodeDictionary(Prefix + c); } else ...{ Prefix = this._DeCodeDictionary[pw].ToString(); c = Prefix[0].ToString(); this.AddOutCharStream(Prefix + c); this.AddDeCodeDictionary(Prefix + c); } pw = cw; }#if debugdisplay DisplayOutCharStream(); DisplayDeCodeCodeStream();#if debugdictionary DisplayDeCodeDictionary();#endif#endif } #endregion }} Class1.cs: #undef debug using System; namespace LZW ... { class Class1 ...{ [STAThread] static void Main(string[] args) ...{ cLZW lzw = new cLZW();#if debug lzw.InCharStream = "ABBABABACCBBAAA";#else System.Console.WriteLine("Enter the Tests CharArray [a-zA-Z0-9]:"); lzw.InCharStream = System.Console.ReadLine();#endif System.Console.WriteLine("The Coding ... ..."); lzw.Coding(); System.Console.WriteLine("The DeCode ... ..."); lzw.SetDeCodeSCodetream(lzw.CodingCodeStream); lzw.Decode(); System.Console.ReadLine(); } }}