解析中缀表达式,同时保留分隔符作为数组元素

本文关键字:分隔符 保留 数组元素 中缀 表达式 | 更新日期: 2023-09-27 18:17:05

c#是否有一种方法让我解析这样的东西:

 "(h1+h2+h3)" into a string array {"(", "h1", "+", "h2", +, "h3", + ")"} ? 

我正在实现分流码算法,我不想为没有令牌做一个工作。

调车场算法

编辑:我刚刚写了我自己的解决方案

private string[] parseExp(string exp)
{
        // it will be at least as long as the input string
        string[] parsed = new string[exp.Length];
        int index = 0;
        foreach(char c in exp)
        {
            if(op.Contains(c))
            {
                index++;
                parsed[index++] += c.ToString();
            }else
            {
                parsed[index] += c.ToString();
            }
        }
        Array.Resize(ref parsed, index + 1);
        return parsed;
}

解析中缀表达式,同时保留分隔符作为数组元素

您可以尝试重新排列表达式,以便您可以使用String拆分它。分割操作,但在这种情况下,你需要知道你的表达式可以包含的所有可能的符号。

string input="(h1+h2+h3)";
String newString = input.Replace("("," ( ").Replace(")"," ) 
"
).Replace("+"," + "); // Reformat string by separating symbols
String[] splitStr = newString.Split(new char[]{' '});
foreach(string x in splitStr)
{
  Console.WriteLine(x);    
}