基于字符串的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;
"-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());