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

基于字符串的C#计算器中的负值,c#,string,visual-studio,calculator,C#,String,Visual Studio,Calculator,我对编程比较陌生,目前正在开发一个基于C#string的计算器。很多都已经很好了,但是我在负系数方面遇到了问题。我的计算器引擎总是寻找下一个操作符并进行相应的计算,所以问题是如果我想计算“-5+6”,第一个操作是“-5”,但显然无法计算。如何分离运算符和系数? 到目前为止我提出的(整个代码的小摘录) “-5”可以被看作是“0-5”的意思,因此如果在字符串的第一个位置看到一个操作数,就可以说有一个隐式零。请注意,此方法仅适用于运算符+和- 关于再次尝试计算“-5”的问题,我建议您使用0作为计算函数

我对编程比较陌生,目前正在开发一个基于C#string的计算器。很多都已经很好了,但是我在负系数方面遇到了问题。我的计算器引擎总是寻找下一个操作符并进行相应的计算,所以问题是如果我想计算“-5+6”,第一个操作是“-5”,但显然无法计算。如何分离运算符和系数? 到目前为止我提出的(整个代码的小摘录)

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

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

Calculate(new List<string>{"0", nextOperation[1]}, "-")
Calculate(新列表{“0”,下一个操作[1]},“-”)

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

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

为了计算这个表达式,您必须先“加密”字符串。 您要查找的主题是括号 可以找到一个很好的basic(python)解释

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

使用NCalc库:

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

简单的表达方式

表达式e=新表达式(“2+3*5”);
Assert(17==e.Evaluate())

处理来自系统的数学函数。数学

Debug.Assert(0==新表达式(“Sin(0)”).Evaluate();
Assert(2==新表达式(“Sqrt(4)”).Evaluate();

Assert(0==新表达式(“Tan(0)”).Evaluate()

“-”不是数字的一部分,它是一元逆运算符。您应该检查-5与5-5-5相同,+5会忽略+但是--5或++5呢?我认为双运算符会影响您的.Contains()。。你的意思是考虑双操作数吗?问题是我在“-”处拆分输入字符串,所以用--5拆分的结果将为空,对吗?也许你可以引入一个求值过程,在这里你可以得到操作数和下一个数字,并计算它的实际值。。。e、 g.5++5,所以您可以获取+++5并将其计算为-5。。。或者你可以扫描字符串中的双操作数并计算它们,然后再次扫描字符串etcI也想到了这一点,如果“-”的索引为0,则在开始处添加了一个0,但部分计算的结果是-5,部分结果替换了“0-5”,然后它尝试再次计算-5。这是一种考虑方法,但这只适用于开始,并且只适用于on-and+。更具体一些会有助于回答这个问题。完全是这样,是的。问题是,每一个其他的计算都很好,我有一些方法可以先计算偏执运算,然后返回一个没有括号的计算,一种找到下一个运算符/运算的方法,每个运算符都有单独的类,偏执运算如何适应这个呢?好吧,基本思想是,分割字符串直到只有一个系数。所以“-5”是递归括号函数的结尾,因此可以作为一个句柄。
Calculate(new List<string>{"0", nextOperation[1]}, "-")