就是数学中的四则运算
如:1+2*(3+4*5)/6-7=?也就是运算表达式没有固定的格式
我要写一个类去处理它们 ,然后直接输出结果
有没有有效的方法》?
如:1+2*(3+4*5)/6-7=?也就是运算表达式没有固定的格式
我要写一个类去处理它们 ,然后直接输出结果
有没有有效的方法》?
解决方案 »
- winform 中嵌combobox的datagridview怎么操作????
- 报表中DataSet如何处理?
- 根据优先级排序的问题,急~~!
- 新手...关于picture添加和读取图片的问题
- 找不到installutil.exe
- pictureBox1_Resize的事件方法中,messageBox(pictureBox1.Width.ToString())执行两遍,为什么
- 请问WindowForm做好后,如何发布生成?
- 关于C#连接非本机SQL数据库的问题
- 急求C# Modem拨号上网的源码(在线等待ing),正确就给分!
- C# 、 JAVA 选哪个啊 , 先听听大家说的 , 这个决定可是关系到我未来的5年啊
- aximp.exe 程序的使用问题
- 为什么采用异步方式ping局域网内存会不断增加
http://bloodwolf-china.javaeye.com/blog/472070
//并且效率非常好,代码如下:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.CSharp;
using System.CodeDom.Compiler;
using System.Reflection;
namespace CalStringValue
{
class Program
{
public static double Function(string str)
{
double result;
StringBuilder classBody = new StringBuilder(400);
classBody.AppendLine("using System;");
classBody.AppendLine("public class TempClass");
classBody.AppendLine("{");
classBody.AppendLine("public double Fun()");
classBody.AppendLine("{");
classBody.AppendLine(string.Format(" return {0};",str));
classBody.AppendLine("}");
classBody.AppendLine("}"); CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters cp = new CompilerParameters();
cp.GenerateExecutable = false;
cp.GenerateInMemory = true;
CompilerResults compResult = provider.CompileAssemblyFromSource(cp, classBody.ToString());
object obj = compResult.CompiledAssembly.CreateInstance("TempClass");
Type objType=obj.GetType();
MethodInfo method = objType.GetMethod("Fun");
result=Convert.ToDouble(method.Invoke(obj, null));
return result; }
static void Main(string[] args)
{
string str = "";
do
{
Console.WriteLine("Input expression:(-1 to Exit)");
str = Console.ReadLine(); try
{
Console.WriteLine("the result is:{0}", Function(str));
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
} while (str != "-1");
}
}
}
object obj=new DataTable().Compute("1+3*4/4",null);
DataTable().Compute() 似乎用不了中括号
DataTable().Compute() 似乎用不了中括号
Microsoft.JScript.GlobalObject.eval("1+2");
2.一个操作符Opt带两个操作数Opd
3.一个表达式可以表示为 Result = Opd1 Opt Opd2
4.操作结果Result也可以作为另一个表达式的操作数
5.于是一个四则运算的表达式就可以用表达式树(计算时使用递归,看起来更像是堆栈)的形式来表示1+2*(3+4*5)/6-7=?
4*5
+3
*2
/6
+1
-7<Result>R
<Opt symbol="-">
<Opt symbol="+">
<Opt symbol="/">
<Opt symbol="*">
<Opd>2</Opd>
<Opt symbol="+">
<Opt symbol="*">
<Opd>5</Opd>
<Opd>4</Opd>
</Opt>
<Opd>3</Opd>
</Opt>
</Opt>
<Opd>6</Opd>
</Opt>
<Opd>1</Opd>
</Opt>
<Opd>7</Opd>
</Opt>
</Result>
能把表达式分析为上面的形式,就不难用递归去计算结果了。