计算字符串作为算术运算

时间:2016-04-23 04:04:35

标签: c# .net

我有一个字符串,由加号,减号,乘法,除法符号等分隔的数字组成,例如:

"1+2*3"="7"

最大符号数可以是两个。我想将此字符串计算为算术运算。我怎样才能做到这一点?我目前的想法是将此字符串拆分为一个列表,然后使用算术运算的正常顺序计算结果。

3 个答案:

答案 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/