我有一个字符串,由加号,减号,乘法,除法符号等分隔的数字组成,例如:
"1+2*3"="7"
。
最大符号数可以是两个。我想将此字符串计算为算术运算。我怎样才能做到这一点?我目前的想法是将此字符串拆分为一个列表,然后使用算术运算的正常顺序计算结果。
答案 0 :(得分:1)
您可以使用内置的DataTable.Compute方法,而不是自己编写代码:
var result = new DataTable().Compute("1+2*3", null); // Will result in 7
DataTable do not implement Dispose method因此以这种方式使用它们是安全的。但是,如果将它们包装在using
语句中,它就不会变得更加丑陋。查看相关的SO post。
答案 1 :(得分:0)
我能够处理这个问题而不将字符串拆分成单独的元素(然后应用算术运算的规则)。
using System;
using System.Data;
public int Maths(string operation)
{
object result=new DataTable().Compute(operation, null);
return Int32.Parse(result.ToString());
}
答案 2 :(得分:0)
您可以使用众多解析器生成器中的任何一个。我认为,.NET平台中最受欢迎的是Antlr。 或者,甚至,您可以使用Pratt algorytm从头开始编写解析器,它非常简单。明确指南 - http://journal.stuffwithstuff.com/2011/03/19/pratt-parsers-expression-parsing-made-easy/