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

本文关键字:计算器 字符串 | 更新日期: 2023-09-27 18:25:17

我对编程相对陌生,目前正在开发一个基于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;

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

"-5"可以被视为"0-5"的意思,因此如果在字符串的第一个位置看到操作数,则可以说存在隐式零。请注意,这种方法只适用于运算符+和-。

至于再次尝试计算"-5"的问题,我建议您使用0作为calculate函数的参数,而不是将其作为正在处理的字符串的前缀:

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

此外,正如评论中所指出的,这种方法不会涵盖所有可能的情况,如果这不是一项学术活动,那么就有解决方案可以解决这个问题。

示例代码看起来有点短。但让我们试着建议:nextOperation是一个包含类似"1*-6+6"的字符串

为了计算这个表达式,你必须先"加密"你的字符串。您要查找的主题是括号在这里可以找到对基本(在python中)的一个很好的解释。

但这个问题在这里已经得到了回答。

使用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());