【发布时间】:2020-01-26 23:35:14
【问题描述】:
我正在尝试用 C# 构建一个计算器以进行练习。我的第一步是解析用户输入方程。出于故障排除的目的,我正在尝试查看我的解析器是否可以区分数字和操作符号(例如“+”、“-”、“/”等)。这个想法是将用户输入操作与包含允许操作(+、-、/、*)的字符数组进行比较。如果用户输入了这些允许的操作之一,代码应该说这是一个允许的操作。执行此操作的代码如下所示:
public static void ProcessEq(string equation)
{
//Parse the equation using regular expression
equation = equation.Replace(" ", "");
char[] operations = { '+', '-', '*', '/' };
string[] parts = Regex.Split(equation, @"(?<=[-+*/()])|(?=[-+*/()])");
foreach (string item in parts)
//Console.WriteLine(item + " is being tested...");
try
{
float num = Int32.Parse(item);
Console.WriteLine(item + " is a number");
}
catch(FormatException)
{
if ( Array.IndexOf(operations, item) > -1 )
{
Console.WriteLine(item + " is a valid operation");
}
else
{
Console.WriteLine(item + " is NOT a valid operation");
}
}
}
if 条件没有选择任何允许的操作符号。如果我输入 2+2,它会一直传递到 else 条件并说用户输入的操作无效。我的 if 条件有缺陷吗?
谢谢
【问题讨论】:
-
有很多不同的方法可以做到这一点。哪种方式最适合您取决于您没有解释的太多事情。如果您决定手动创建表达式评估器而不是使用many existing parsers 之一,那么您已经走错了方向。你需要break your problem into simpler steps;例如摆脱那个正则表达式并构建一个函数来返回字符串是否为整数。
-
我从正则表达式开始,因为我知道最终我希望解析器能够处理复杂的表达式。我对 C# 完全陌生,所以我仍在学习。我知道我可能根本没有构建一个高效的解析器。无论如何,我只想通过修补来尝试学习。不过还是谢谢你的指点。
标签: c#