【问题标题】:Solving a simple equation from Visual Studio Command Line Arguments (without using libraries)从 Visual Studio 命令行参数求解一个简单的方程(不使用库)
【发布时间】:2019-02-13 22:05:53
【问题描述】:
我想在 Visual Studio 中准备一个 c# 程序,作为一个简单的方程求解器。方程求解器仅使用运算符(+、-、*、/)从命令行 args 运行
所以输入格式为“calc 3X + 5 = 8”
并且输出会给你 X = 1
【问题讨论】:
标签:
c#
command-line
command-line-arguments
equation
【解决方案1】:
你必须创建一个解析器 => 像这样分析参数
解析器例如:https://github.com/mariuszgromada/MathParser.org-mXparser
如果没有库,我建议考虑像“3 * X = 2”这样的参数,如果你发现 X 是变量,则循环每个字符,你可以分析 *、-、+ 和 / 作为运算符:
foreach char c in args[0]
{
if (c == '*')...
if (c == '+')...
if (c == 'X') => you have identify the variable
}
在你编写逻辑来解决方程之后
这是一个开始...
}
google 数学解析器或数学方程解析器
【解决方案2】:
嗯,你需要做的第一件事就是编写一个解析器。根据您的语法 的复杂性,您可以手动完成。但是,如果它非常复杂,您可能需要使用工具/库来完成它。
传统上,您会使用 lexer 将您的输入转换为 tokens 流。然后,您将使用另一个工具使用您的语法来解析令牌流。典型的例子是 Unix 的 Lex 和 YACC 工具集。
Antlr 是一种更现代(且更易于使用)的输入解析方式。而且,它往往会链接到每个 C# 项目中。如果您购买主要的 Antlr 4 书,我认为您的问题是第一个示例。
一旦你解释并理解了输入,那么你需要想出一个求解器来求解方程。
祝你好运。
顺便说一句,“不使用库”是相对的。如果您使用 .NET 框架的任何部分,您就是在“使用库”。如果您不想使用任何 3rd 方库,请阅读我提到的一些内容以了解它们的工作方式(例如,它们如何使用正则表达式)并从那里开始。
一旦您有一些代码要显示并遇到一些问题,请返回并提出 Stack Overflow 可回答的问题。