【问题标题】:Catch exception not picking up on operation string捕获异常未在操作字符串上拾取
【发布时间】: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#


【解决方案1】:

Array.IndexOf 正在字符数组中查找字符串。您可以简单地将其更改为

if ( Array.IndexOf(operations, item[0]) > -1 )

if ( Array.IndexOf(operations, Convert.ToChar(item)) > -1 )

修复它。

【讨论】:

  • 嗯,有道理。现在修好了,我可以继续前进!谢谢!
猜你喜欢
  • 2012-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-27
  • 1970-01-01
  • 1970-01-01
  • 2017-03-23
  • 1970-01-01
相关资源
最近更新 更多