我对编程比较陌生,而且我目前正在研究基于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;
答案 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());