2012-04-03 70 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