1. 程式人生 > 實用技巧 >C# - 10以內的加減乘除

C# - 10以內的加減乘除

    class Program
    {
        static void Main(string[] args)
        {
            var source = "5+2*2-3*4/2";
            var result = Cal(source);
            Console.WriteLine(result);
        }

        static int Cal(string str)
        {
            var numStack = new Stack<int>();//儲存數字的棧
var opStack = new Stack<char>();//儲存操作符的棧 int result; foreach (var c in str) { if (IsNumeric(c, out var i)) { numStack.Push(i); continue; } while
(opStack.Count > 0) { var f = Check(c, opStack); if (f) { break; } result = Cal(numStack, opStack); numStack.Push(result); } opStack.Push(c); } result
= Cal(numStack, opStack); numStack.Push(result); return result; } /// <summary> /// 判斷是否是數字 /// </summary> /// <param name="c"></param> /// <param name="i"></param> /// <returns></returns> static bool IsNumeric(char c, out int i) { var pattern = @"^\d+$"; var rgx = new Regex(pattern); var flag = rgx.IsMatch(c.ToString()); i = 0; if (flag) { i = Convert.ToInt32(c.ToString()); } return flag; } /// <summary> /// 判斷當前操作符的優先順序是否高於棧頂的操作符 /// </summary> /// <param name="c"></param> /// <param name="opStack"></param> /// <returns></returns> static bool Check(char c, Stack<char> opStack) { char op = opStack.Peek(); if (op == '*' || op == '/') { return false; } if (c == '*' || c == '/') { return true; } return false; } /// <summary> /// 計算 /// </summary> /// <param name="numStack"></param> /// <param name="opStack"></param> /// <returns></returns> static int Cal(Stack<int> numStack, Stack<char> opStack) { var num1 = numStack.Pop(); var num2 = numStack.Pop(); char op = opStack.Pop(); switch (op) { case '+': return num2 + num1; case '-': return num2 - num1; case '*': return num2 * num1; case '/': return num2 / num1; default: throw new Exception("not valid op"); } } }