C# 运算符优先级计算与正则表达式

C# 运算符优先级计算与正则表达式,c#,regex,calculator,operator-precedence,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 <

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

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();
string s=“100+50-2*5*3”;
字符串[]ss=新字符串[20];
ss=Regex.Split(s,“\\+\124;-\\\*”;
MatchCollection sig=Regex.Matches(s,“\\+\124;-\\\*”;
int x=int.Parse(ss[0]);
对于(int i=1;i
所以现在当计算表达式时,我得到148。
我如何开始计算“*”
和“”/“符号?

如果您想以与开始相同的方式进行计算:

您必须在尽可能多的时间内计算它,因为您有不同的符号优先级,并且在每次计算之后,您将替换原始序列中的新值,然后使用优先级较低的符号再次进行计算

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

首先检查:这是一个常见问题。在这里对Stackoverflow进行一些研究和搜索,或者在web上进行搜索,应该可以找到很多关于处理运算符优先级的文章。您还可以查找有关“解析”表达式的文章。Krzysztof使用反向抛光的想法很好。我已经编辑了你的标题。请看“,”其中的共识是“不,他们不应该”。看看S和。还有谷歌。