using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 计算器
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入一个算式");
string str = Console.ReadLine();//接受收入的运算
string[] separator = {"+","-","*","/" };//用来分割str,获得数字
string[] number = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };// 用来分割str,获得操作符
List<string> lstr = new List<string>();//定义一个string的泛型集合
lstr.AddRange(str.Split(separator, StringSplitOptions.RemoveEmptyEntries));//将str分割得到的数字存到泛型集合中
List<string> lopretor = new List<string>();//定义一个string的泛型集合
lopretor.AddRange(str.Split(number,StringSplitOptions.RemoveEmptyEntries));//将str分割得到的运算符存到泛型集合中
//删除小数点,留下+ - * /
while (true)
{
lopretor.Remove(".");
if (!lopretor.Contains("."))
{
break;
}
}
//foreach (var item in lopretor)
//{
//
Console.WriteLine(item);
//}
double result = 0;//定义一个结果用来接收
for (int i = 0; i < lopretor.Count; i++)//循环遍历lpretor的集合,读取其中存储的操作符
{
Opretor o = Factory.GetOpretor(lopretor[i]);//调用Factory的GetOpretor方法,根据lopretor[i]的值返回一个Opretor对象
if (i == 0)//该运算符的索引为0
{
result = o.GetResult(Convert.ToDouble(lstr[i]), Convert.ToDouble(lstr[i + 1]));//将lstr的前2个数字做运算
}
else//该运算符的索引位置不为0时
{
result=o.GetResult(result, Convert.ToDouble(lstr[i + 1]));//将第一次的结果result传入方法中做运算
}
}
Console.Write(result);
Console.ReadKey();
}
}
//定义一个工厂类
public class Factory
{
public static Opretor GetOpretor(string op)
{
Opretor opre = null;
switch(op)
{
case "+": opre = new Add();
break;
case "-": opre = new Cut();
break;
case "*": opre = new Mul();
break;
case "/": opre = new Div();
break;
default: return null;
}
return opre;
}
}
//定义一个运算类
public class Opretor
{
//声明一个虚方法
public virtual double GetResult(double num1, double num2)
{
return 0;
}
}
//定义一个加法类,继承运算类
public class Add : Opretor
{
//重写运算类中GetResult的方法
public override double GetResult(double num1, double num2)
{
return num1 + num2;
}
}
//定义一个减法类,继承运算类
public class Cut : Opretor
{
//重写运算类中GetResult的方法
public override double GetResult(double num1, double num2)
{
return num1 - num2;
}
}
//定义一个乘法类,继承运算类
public class Mul : Opretor
{
//重写运算类中GetResult的方法
public override double GetResult(double num1, double num2)
{
return num1 * num2;
}
}
//定义一个除法类,继承运算类
public class Div : Opretor
{
//重写运算类中GetResult的方法
public override double GetResult(double num1, double num2)
{
return num1 / num2;
}
}
}