我编写了一个数学 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。这不是一个优雅的解决方案,您有任何解决方法的想法吗?