将具有方程式值的字符串列表处理为具有有序方程式值的列表

时间:2018-12-08 00:11:12

标签: c# .net

主题标题可能会令人困惑,但是在示例中: 我们有方程式,例如“ 3/4 * 4 + 4/3/2-4/4” 因此列表包含值“ 3”,“ /”,“ 4”,“ *”,“ 4”,“ +”,“ 4”,“ /”,“ 3”,“ /”,“ 2”,“- “,” 4“,” /“,” 4“。 我想将其处理为(3/4 * 4)+(4/3/2)-(4/4)。 这意味着方程式值按执行队列的规则分组(*和/始终是执行的第一个,在-和+之前)

2 个答案:

答案 0 :(得分:1)

一种简单的方法是使用NCalc库。

Expression e = new Expression("3 / 4 * 4 + 4 / 3 / 2 - 4 / 4");
e.Evaluate();
var equation = e.ParsedExpression.ToString();

尽管这意味着输出将具有更多的“(”,“)”,但是Math Expression将是正确的。以上的输出将是

(((3 / 4) * 4) + ((4 / 3) / 2)) - (4 / 4)

答案 1 :(得分:0)

当然可以使用正则表达式来完成。

string s = "3/4*4 + 4 / 3/2+17-4/4";
string res = Regex.Replace(s, @"[^+-]*[*/][^+-]*", @"($0)");
Console.WriteLine(res); //(3/4*4 )+( 4 / 3/2)+17-(4/4)

我添加了一些空格以获取更多奇特的输出,正则表达式仅查找+-* /,因此它不在乎。