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

时间:2015-12-02 11:49:10

标签: c# string visual-studio calculator

我对编程比较陌生,而且我目前正在研究基于C#字符串的计算器。很多工作已经很好了,但我遇到负系数问题。我的计算器引擎总是寻找下一个操作符并相应地计算,所以问题是如果我想计算" -5 + 6",第一个操作是" -5&#34 ;,但是它显然无法计算。如何区分运算符和系数? 到目前为止我提出的(整个代码的小提取物)

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;

3 个答案:

答案 0 :(得分:3)

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

至于尝试再次计算“-5”的问题,我建议你使用0作为你的Calculate函数的参数,而不是将它预先添加到你正在处理的字符串中:

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

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

答案 1 :(得分:0)

示例代码看起来有点短。但是,让我们尝试建议: nextOperation是一个包含&#34; 1 * -6 + 6&#34;

之类的字符串

为了评估此表达式,您必须加密&#39;你的字符串首先。 您要查找的主题是括号 可以找到基本(在python中)的一个很好的解释here

但是这个问题已经回答here

答案 2 :(得分:0)

使用NCalc Library:

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

简单表达

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