我想请求帮助找出运算符优先级计算的逻辑 .. 目前我有这样的代码,只能用“+”或“ - ”符号计算表达式。
string s = "100 + 50 -2*5*3";
string[] ss = new string[20];
ss = Regex.Split(s, "\\+|-|\\*");
MatchCollection sig = Regex.Matches(s, "\\+|-|\\*");
int x = int.Parse(ss[0]);
for (int i = 1; i < ss.Length; i++)
{
if (sig[i - 1].ToString() == "+")
x += int.Parse(ss[i]);
else if (sig[i - 1].ToString() == "-")
x -= int.Parse(ss[i]);
}
label1.Text = x.ToString();
所以现在计算表达式 100 + 50 - 2 * 5 * 3 时,我得到148。 我怎样才能首先计算“*”和“/”标志?
答案 0 :(得分:0)
如果您想以与开始时相同的方式继续前进:
您必须在尽可能多的时间内计算它,因为您有不同的符号优先级,并且在每次计算后,您将替换原始序列中的新值,并使用较低的优先级符号再次执行此操作。
original := "100+50-2*5*3"
precedance := {*, /, +, -}
for each precedance => P
while there is a sub-calculation using P => C
C := first sub-calculation using P
compute C
replace C in original
enf for
end for