运算符优先级计算和RegEx

时间:2014-01-11 10:57:42

标签: c# regex calculator operator-precedence

我想请求帮助找出运算符优先级计算的逻辑 .. 目前我有这样的代码,只能用“+”“ - ”符号计算表达式。

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。 我怎样才能首先计算“*”“/”标志?

1 个答案:

答案 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