2012-04-03 69 views
0

我有一個任務來從中綴創建後綴表示法。我得到了代碼正常工作,我有一個字符串的後綴表示法,但我不知道如何從中得到答案。有沒有我可以調用的.NET方法?我試着用谷歌搜索的問題,只能找到如何將其更改爲修復後。解決c#中的後綴表示法表達式

任何幫助,非常感謝。

更新 我需要找到答案就像一個表達式:12 + 3-4 + 5

我希望能找到一個更簡單的方式來做到這一點,但我沒有,所以我寫了我自己的方法來。當我被允許時,我會在8小時內發佈它。

+0

請問您能否再次更改您的查詢並提供更多詳細信息? – Pankaj 2012-04-03 17:26:35

+0

做什麼的方法? – harold 2012-04-03 17:27:41

+0

我是否必須編寫自己的方法來解決表達式,還是有內置的類可以用來解決它? – 2012-04-03 17:45:13

回答

1

後綴是像在字符串表達式 「10 9 + 7%3 - 」

postfix = postfix.Trim(); 
       string[] ans = postfix.Split(' '); 
       Stack<int> eval = new Stack<int>(); 
       for (int x = 0; x < ans.Length; x++) 
       { 
        if ("*+%/-".Contains(ans[x])) 
        { 
         int temp1; 
         int temp2; 

         switch (ans[x]) 
         { 
          case ("*"): 
           eval.Push(eval.Pop() * eval.Pop()); 
           break; 
          case "-": 
           temp1 = eval.Pop(); 
           temp2 = eval.Pop(); 
           eval.Push(temp2 - temp1); 
           break; 
          case "%": 
           temp1 = eval.Pop(); 
           temp2 = eval.Pop(); 
           eval.Push(temp2 % temp1); 
           break; 
          case "+": 
           eval.Push(eval.Pop() + eval.Pop()); 
           break; 
          case "/": 
           temp1 = eval.Pop(); 
           temp2 = eval.Pop(); 
           eval.Push(temp2/temp1); 
           break; 
         } 

        } 
        else 
         eval.Push(Convert.ToInt32(ans[x])); 
       } 

//太快關切的代碼。在for語句完成後,執行答案將是int answer = eval.Pop();

0
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Collections; 

namespace pof 
{ 
    class eva 
    { 
     public string po; 
     public string answer; 
     Stack i = new Stack(); 
     public void e() 
     { 
      int a, b, ans; 
      for (int j = 0; j < po.Length; j++) 
      { 
       String c = po.Substring(j, 1); 
       if (c.Equals ("*")) 
       { 
        String sa = (String)i.Pop(); 
        String sb = (String)i.Pop(); 
        a = Convert.ToInt32(sb); 
        b = Convert.ToInt32(sa); 
        ans = a * b; 
        i.Push(ans.ToString()); 

       } 
       else if (c.Equals("/")) 
       { 
        String sa = (String)i.Pop(); 
        String sb = (String)i.Pop(); 
        a = Convert.ToInt32(sb); 
        b = Convert.ToInt32(sa); 
        ans = a/b; 
        i.Push(ans.ToString()); 
       } 
       else if (c.Equals("+")) 
       { 
        String sa = (String)i.Pop(); 
        String sb = (String)i.Pop(); 
        a = Convert.ToInt32(sb); 
        b = Convert.ToInt32(sa); 
        ans = a + b; 
        i.Push(ans.ToString()); 

       } 
       else if (c.Equals("-")) 
       { 
        String sa = (String)i.Pop(); 
        String sb = (String)i.Pop(); 
        a = Convert.ToInt32(sb); 
        b = Convert.ToInt32(sa); 
        ans = a - b; 
        i.Push(ans.ToString()); 

       } 
       else 
       { 
        i.Push(po.Substring(j, 1)); 
       } 
      } 
      answer=(String)i.Pop(); 
     } 
    } 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      eva e1 = new eva(); 
      Console.WriteLine("enter any postfix expression"); 
      e1.po = Console.ReadLine(); 
      e1.e(); 
      Console.WriteLine("\n\t\tpostfix evaluation: " + e1.answer); 
      Console.ReadKey(); 
     } 
    } 
} 
+0

如果你可以給你的解決方案添加一個簡短的解釋,那會很好。這會讓你的答案更加完整。一個完整的答案有較高的獲得upvoted的機會。 – honk 2014-11-16 19:18:09