C# 运算符优先级c

C# 运算符优先级c,c#,mathematical-expressions,C#,Mathematical Expressions,我需要控制文本框中的运算符优先级。应该是17岁。如何修复它? 对运算符进行排序时,请确保提供自定义的IComparer void Main() { var comparer = new OperatorComparer(); var operators = new[] { '+', '-', '*', '/' }; Array.Sort(operators,comparer); } public class OperatorComparer : IComparer {

我需要控制文本框中的运算符优先级。应该是17岁。如何修复它?

对运算符进行排序时,请确保提供自定义的IComparer

void Main()
{
var comparer = new OperatorComparer();
    var operators = new[] { '+', '-', '*', '/' };
    Array.Sort(operators,comparer);

}
public class OperatorComparer : IComparer
{
    public int Compare(object x, object y)
    {
        var xv = (char)x;
        var yv = (char)y;
        if (xv == '*' || xv == '/')
        {
            if(yv == '*' || yv == '/')
                return 0;
            else 
                return -1;
        }
        else if (yv == '+' || yv == '-')
            return 0;
        return 1;
    }
}

这将有所帮助,但在没有看到所有代码的情况下,我仍然认为它无法处理括号。查看AST构建解析器,它们将有助于创建真正的计算器函数。

乘法周围的括号。代码从左到右执行。另外,在将来,请显示您的实际代码,而不仅仅是图像。你图像的URL将来可能会死掉。如何修复什么?你的代码是什么?当您试图改进它时遇到的困难是什么?您还没有真正向我们展示您的代码,但似乎您需要多次查看输入以找到最高优先级的运算符。请展示代码,而不仅仅是图像。您的代码可能以某种方式解析字符串2+3*5,并最终导致计算2+3*5,而不是2+3*5。我认为您需要添加代码以支持运算符优先级。它不是仅仅因为你希望它在稀薄的空气中形成的。如果您使用的是中缀符号,那么一种简单的基于堆栈的方法应该可以很好地工作,它可以免费为您提供括号。