0

我编写了一个数学 C# 应用程序,用户可以在其中以预定义的方式定义函数,例如

COS({x}+3*(2+SQRT({x})))

对于评估,我使用 Shutting-Yard 算法。我有一个函数来标记上面的字符串,它在列表中产生以下输入:

FUNCTION,OPEN_PARENTHESIS,VARIABLE,OPERATOR,NUMBER,OPERATOR,OPEN_PARENTHESIS,NUMBER,OPERATOR,FUNCTION,OPEN_PARENTHESIS,VARIABLE,CLOSE_PARENTHESIS,CLOSE_PARENTHESIS,CLOSE_PARENTHESIS。

这很好用,但我有负数的问题,我不知道如何处理减法运算符,什么时候减法和什么时候负号?

该函数遍历字符串并在其中搜索模式(例如,当 i. 字符为 '{' 则 (i+1). character 必须是小写字母且 (i+2). character 必须为 '} ',存储变量并继续使用 (i+3). 字符,否则会引发语法错误。)现在这个函数接受负数,而不是减法,它接受与负数的乘法并使用 '+',所以3-1 我必须使用 3+(-1)*1。这不是一个优雅的解决方案,您有任何解决方法的想法吗?

4

2 回答 2

0

我写了一个可以解析 C# 样式表达式的小型开源库。

https://github.com/davideicardi/DynamicExpresso

您可以编写自定义函数(如 COS、SQRT)、注入变量或参数 (x)。或者您可以使用内置的 C# 函数(Math.Sqrt,...)。

您可以在以下位置找到现场演示:http ://dynamic-expresso.azurewebsites.net/

也许这个库可以加快你的工作。

于 2013-03-26T12:02:35.940 回答
0

如果您在行首、左括号之后或另一个符号后面看到 - ,则后面的数字为负数

于 2013-03-26T11:45:19.367 回答