string params = "3*5/2"; int index = param.indexof("*",0,param.length); int a = Convert.ToInt32(param.substring(0,index));//取出第一个数。 param = param.remove(0,index+1); char opera1 = param[0];//操作符 index = param.indexof("/",0,param.length); int b = Convert.ToInt32(param.subtring(0,index));//取第二个操作数。 char opera2 = param[0];//操作符 int c = Convert.ToInt32(param.remove(0,index+1));//取第三个操作数 如果这是一个实例,你可按相似方法,具体操作符的运算规则不同,你可参考任何一本数据结构的书,上面有关于数学计算的实现。很简单的,用堆栈实现。如果就是这个字符串,直接分析出数据计算就可以了
int i = Arithmetic.Val("1+2+3+4*5");
*/ #endregionusing Microsoft.JScript; using Microsoft.JScript.Vsa; using Microsoft.Vsa;namespace Rainsoft.TextEx { public class Arithmetic { public static object Val(string s) { VsaEngine v = new VsaEngine(); v.InitVsaEngine("", new BaseVsaSite()); return Microsoft.JScript.Eval.JScriptEvaluate(s, v); } } }
自己搞个词法分析器噢,TABLE-DRIEVEN,TABLE 不大的
declare @sum varchar(800) set @sum='select top ' + cast(2 * 3/2 as varchar) + ' * from empinfo' exec (@sum)
int index = param.indexof("*",0,param.length);
int a = Convert.ToInt32(param.substring(0,index));//取出第一个数。
param = param.remove(0,index+1);
char opera1 = param[0];//操作符
index = param.indexof("/",0,param.length);
int b = Convert.ToInt32(param.subtring(0,index));//取第二个操作数。
char opera2 = param[0];//操作符
int c = Convert.ToInt32(param.remove(0,index+1));//取第三个操作数
如果这是一个实例,你可按相似方法,具体操作符的运算规则不同,你可参考任何一本数据结构的书,上面有关于数学计算的实现。很简单的,用堆栈实现。如果就是这个字符串,直接分析出数据计算就可以了
*/
#endregionusing Microsoft.JScript;
using Microsoft.JScript.Vsa;
using Microsoft.Vsa;namespace Rainsoft.TextEx
{
public class Arithmetic
{
public static object Val(string s)
{
VsaEngine v = new VsaEngine();
v.InitVsaEngine("", new BaseVsaSite());
return Microsoft.JScript.Eval.JScriptEvaluate(s, v);
}
}
}
set @sum='select top ' + cast(2 * 3/2 as varchar) + ' * from empinfo'
exec (@sum)