using System.Collections; using System.Collections.Generic; namespace OOPM ... { public class Interpret ...{ } public class Context ...{ private string _Statement; private int _Data; public Context(string statement) ...{ this._Statement = statement; } public string Statement ...{ get ...{ return this._Statement; } set ...{ this._Statement = value; } } public int Data ...{ get ...{ return this._Data; } set ...{ this._Data = value; } } } public abstract class Expression ...{ protected Dictionary<string, int> table = new Dictionary<string, int>(9); public Expression() ...{ table.Add("一", 1); table.Add("二", 2); table.Add("三", 3); table.Add("四", 4); table.Add("五", 5); table.Add("六", 6); table.Add("七", 7); table.Add("八", 8); table.Add("九", 9); } public virtual void Interpret(Context context) ...{ if(context.Statement.Length == 0) ...{ return; } foreach (string key in table.Keys) ...{ int value = table[key]; if (context.Statement.EndsWith(key + GetPostfix())) ...{ context.Data += value * this.Multiplier(); context.Statement = context.Statement.Substring(0, context.Statement.Length-this.GetLength()); } if (context.Statement.EndsWith("零")) ...{ context.Statement = context.Statement.Substring(0, context.Statement.Length - 1); } } } public abstract string GetPostfix(); public abstract int Multiplier(); public virtual int GetLength() ...{ return this.GetPostfix().Length + 1; } } public class WanExpression : Expression ...{ public override string GetPostfix() ...{ return "万"; } public override int Multiplier() ...{ return 10000; } public override void Interpret(Context context) ...{ if (context.Statement.Length == 0) ...{ return; } ArrayList tree = new ArrayList(); tree.Add(new GeExpression()); tree.Add(new ShiExpression()); tree.Add(new BaiExpression()); tree.Add(new QianExpression()); foreach (string key in table.Keys) ...{ if (context.Statement.EndsWith(GetPostfix())) ...{ int temp = context.Data; context.Data = 0; context.Statement = context.Statement.Substring(0, context.Statement.Length - 1); foreach (Expression exp in tree) ...{ exp.Interpret(context); } context.Data = temp + this.Multiplier() * context.Data; } } } } public class QianExpression : Expression ...{ public override string GetPostfix() ...{ return "千"; } public override int Multiplier() ...{ return 1000; } } public class BaiExpression : Expression ...{ public override string GetPostfix() ...{ return "百"; } public override int Multiplier() ...{ return 100; } } public class ShiExpression : Expression ...{ public override string GetPostfix() ...{ return "十"; } public override int Multiplier() ...{ return 10; } } public class GeExpression : Expression ...{ public override string GetPostfix() ...{ return ""; } public override int Multiplier() ...{ return 1;//10^0 } public override int GetLength() ...{ return 1; } } /**//// <summary> /// 客户代码 /// </summary> public class InterpretApp ...{ public static int Main(string ChineseCharacter) ...{ Context context = new Context(ChineseCharacter); ArrayList tree = new ArrayList(); tree.Add(new GeExpression()); tree.Add(new ShiExpression()); tree.Add(new BaiExpression()); tree.Add(new QianExpression()); tree.Add(new WanExpression()); foreach (Expression exp in tree) ...{ exp.Interpret(context); } return context.Data; } }}