實現四則混合運算的代碼

來源:互聯網
上載者:User
運算

這是一個實現四則混合運算的代碼,包括三個方法,調用時,使用Compute()方法即可,這個方法可以用於動態計算。
 
代碼:
         string Precede(string p, string q)
       {
           switch(p)
           {
              case "+":
              case "-":
                  return ("*/(".IndexOf(q) != -1) ? "<":">";
              case "*":
              case "/":
                  return (q == "(") ? "<":">";
              case "(":
                  return (q == ")") ? "=":"<";
              case ")":
                  return (q == "(") ? "?":">";
              case "#":
                  return (q == "#") ? "=":"<";
           }
           return "?";
       }
 
       double Operate(double a, char o, double b)
       {
           switch(o)
           {
              case '+':
                  return a + b;
              case '-':
                  return a - b;
              case '*':
                  return a * b;
              case '/':
                  return a / b;
           }
           return 0;
       }
 
       object Compute(string expression)
       {
           Stack nArr = new Stack(), oArr = new Stack();
           int j = 0;
           Double a = 0, b = 0;
           string w = "";
           char o;
           MatchCollection arr = Regex.Matches(expression.Replace(" ", "") + "#", @"(((?<=(^|\())-)?\d+(\.\d+)?|\D)");
 
           oArr.Push("#");
           w = Convert.ToString(arr[j++]);
           while(!(w == "#" && Convert.ToString(oArr.Peek()) == "#"))
           {
              if("+-*/()#".IndexOf(w) != -1)
              {
                  switch(Precede(oArr.Peek().ToString(), w))
                  {
                     case "<":
                         oArr.Push(w);
                         w = Convert.ToString(arr[j++]);
                         break;
                     case "=":
                         oArr.Pop();
                         w = Convert.ToString(arr[j++]);
                         break;
                     case ">":
                         o = Convert.ToChar(oArr.Pop());
                         b = Convert.ToDouble(nArr.Pop());
                         a = Convert.ToDouble(nArr.Pop());
                         nArr.Push(Operate(a, o, b));
                         break;
                     default:
                         return "計算出錯!";   
                  }
              }
              else
               {
                  nArr.Push(w);
                  w = Convert.ToString(arr[j++]);
              }
           }
           return nArr.Pop();
       }


 



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。