我有一個任務來從中綴創建後綴表示法。我得到了代碼正常工作,我有一個字符串的後綴表示法,但我不知道如何從中得到答案。有沒有我可以調用的.NET方法?我試着用谷歌搜索的問題,只能找到如何將其更改爲修復後。解決c#中的後綴表示法表達式
任何幫助,非常感謝。
更新 我需要找到答案就像一個表達式:12 + 3-4 + 5
我希望能找到一個更簡單的方式來做到這一點,但我沒有,所以我寫了我自己的方法來。當我被允許時,我會在8小時內發佈它。
我有一個任務來從中綴創建後綴表示法。我得到了代碼正常工作,我有一個字符串的後綴表示法,但我不知道如何從中得到答案。有沒有我可以調用的.NET方法?我試着用谷歌搜索的問題,只能找到如何將其更改爲修復後。解決c#中的後綴表示法表達式
任何幫助,非常感謝。
更新 我需要找到答案就像一個表達式:12 + 3-4 + 5
我希望能找到一個更簡單的方式來做到這一點,但我沒有,所以我寫了我自己的方法來。當我被允許時,我會在8小時內發佈它。
後綴是像在字符串表達式 「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();
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();
}
}
}
如果你可以給你的解決方案添加一個簡短的解釋,那會很好。這會讓你的答案更加完整。一個完整的答案有較高的獲得upvoted的機會。 – honk 2014-11-16 19:18:09
請問您能否再次更改您的查詢並提供更多詳細信息? – Pankaj 2012-04-03 17:26:35
做什麼的方法? – harold 2012-04-03 17:27:41
我是否必須編寫自己的方法來解決表達式,還是有內置的類可以用來解決它? – 2012-04-03 17:45:13