Evaluate string with math operators [duplicate]

Is there an easy way to evaluate strings like "(4+8)*2" So that you'd get the int value of 24?

Or is there a lot of work needed to get this done...?


Solution 1:

Someone else added this and then it got deleted. I thought it was pretty cool because no 3rd party libraries required.

class Program
    {

        static void Main(string[] args)
        {
            Console.WriteLine(Evaluate("(4+8)*2"));
            Console.ReadKey();
        }

        public static double Evaluate(string expression)
        {
            DataTable table = new DataTable();
            table.Columns.Add("expression", typeof(string), expression);
            DataRow row = table.NewRow();
            table.Rows.Add(row);
            return double.Parse((string)row["expression"]);
        }

    } 

Solution 2:

Use Ncalc:

Expression e = new Expression("(4+8)*2");
Debug.Assert(24 == e.Evaluate());   

http://ncalc.codeplex.com/

Also, this question had been previously asked and has some interesting answers including Ncalc : Evaluating string "3*(4+2)" yield int 18

Solution 3:

You need a Math Expression Parser for that. Below are resources on that:

  • (commercial) http://www.bestcode.com/html/bcparser_net.html
  • (open source) http://ncalc.codeplex.com/
  • https://github.com/pieterderycke/Jace#jacenet
  • http://www.codeproject.com/KB/recipes/MathieuMathParser.aspx
  • http://www.codeproject.com/KB/recipes/matheval.aspx