基于字符串的 C# 计算器中的负值

Negative value in string based C# Calculator

我是编程新手,目前正在研究基于 C# 字符串的计算器。很多已经可以正常工作了,但是我遇到了负系数的问题。我的计算器引擎总是寻找下一个运算符并进行相应的计算,所以问题是如果我要计算“-5+6”,第一个运算是“-5”,但显然计算不出来。如何分离运算符和系数? 到目前为止我想出了什么(整个代码的一小部分)

if (nextOperation.Contains("+"))
        {
            string firstOperationResult = Calculate(nextOperation.Split('+').ToList(), "+")[0];
            string partialFormulaReplacement = partialFormula.Replace(nextOperation, firstOperationResult);

            return CalculateDashOperation(partialFormulaReplacement);
        }

        else if (nextOperation.Contains("-") && nextOperation.IndexOf("-") > 0)
        {
            string resultOfFirstOperation = Calculate(nextOperation.Split('-').ToList(), "-")[0];
            string partialFormulaReplacement = partialFormula.Replace(nextOperation, resultOfFirstOperation);

            return CalculateDashOperation(partialFormulaReplacement);
        }
        //added
        else if (nextOperation.Contains("-") && nextOperation.IndexOf("-") == 0)
        {
            //what to do
        }
        //added
        return partialFormula;

“-5”可以被视为表示“0-5”,因此如果您在字符串的第一个位置看到一个操作数,您可以说存在隐含的零。请注意,此方法仅适用于运算符 + 和 -。

关于再次尝试计算“-5”的问题,我建议您使用 0 作为计算函数的参数,而不是将其添加到您正在处理的字符串之前:

Calculate(new List<string>{"0", nextOperation[1]}, "-")

此外,正如评论中指出的那样,这种方法不会涵盖所有可能的情况,如果这不是学术练习,那么已经有解决方案可以解决这个问题。

示例代码看起来有点短。但是让我们尝试建议: nextOperation 是一个包含类似“1 * -6 + 6”

的字符串

为了计算这个表达式,你必须先 'encrypt' 你的字符串。 您要查找的主题是括号 可以在 here.

中找到对基本内容(在 python 中)的一个很好的解释

但是这个问题已经有人回答了here

使用 NCalc 库:

不要重新发明轮子,* 和 / 优先级已经实施。

简单表达式

Expression e = new Expression("2 + 3 * 5"); Debug.Assert(17 == e.Evaluate());

处理来自 System.Math

的数学泛函

Debug.Assert(0 == new Expression("Sin(0)").Evaluate()); Debug.Assert(2 == new Expression("Sqrt(4)").Evaluate()); Debug.Assert(0 == new Expression("Tan(0)").Evaluate());