0
評估算術表達式我需要從字符串冪評估算術表達式,例如:與冪從字符串
string expression = "4*5+2^3"
^符號可以改變任何其他符號或字符串,但它在被寫入與+ - *操作方式相同,因爲數字和運算符有些隨機生成。 有沒有辦法做到這一點?我不知道,你可以寫冪操作這種方式NCalc或Jace.Net
評估算術表達式我需要從字符串冪評估算術表達式,例如:與冪從字符串
string expression = "4*5+2^3"
^符號可以改變任何其他符號或字符串,但它在被寫入與+ - *操作方式相同,因爲數字和運算符有些隨機生成。 有沒有辦法做到這一點?我不知道,你可以寫冪操作這種方式NCalc或Jace.Net
你可以寫如下計算器類來執行動態的C#代碼:
public class Evaluator
{
public int Evaluate(string expression)
{
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
CompilerParameters compilerParameters = new CompilerParameters();
compilerParameters.ReferencedAssemblies.Add("system.dll");
compilerParameters.CompilerOptions = "/t:library";
compilerParameters.GenerateInMemory = true;
StringBuilder typeDefinition = new StringBuilder("");
typeDefinition.AppendLine("using System;");
typeDefinition.AppendLine("namespace Evaluator");
typeDefinition.AppendLine("{");
typeDefinition.AppendLine(" public class Evaluator");
typeDefinition.AppendLine(" {");
typeDefinition.AppendLine(" public object Evaluate()");
typeDefinition.AppendLine(" {");
typeDefinition.AppendLine(" return " + expression + ";");
typeDefinition.AppendLine(" }");
typeDefinition.AppendLine(" }");
typeDefinition.AppendLine("}");
CompilerResults compilerResult = codeProvider.CompileAssemblyFromSource(compilerParameters, typeDefinition.ToString());
System.Reflection.Assembly a = compilerResult.CompiledAssembly;
object o = a.CreateInstance("Evaluator.Evaluator");
Type dynamicEvaluatorType = o.GetType();
MethodInfo dynamicEvaluateMethod = dynamicEvaluatorType.GetMethod("Evaluate");
return (int) dynamicEvaluateMethod.Invoke(o, null);
}
}
然後你可以使用它這樣:
string expression = "4*5+2";
int result = new Evaluator().Evaluate(expression);
C#中的'^'不是冪,它是xor。指數運算是'Math.Pow(...)' – xanatos
我沒有看到任何簡單的解決方案。你必須對錶達式進行標記,然後用'Math.Pow' ...複數代替'^'。 – xanatos
由於5+(3 + 2)^(4 + 3)是「複雜的」(括號),因此將表達式標記化非常複雜,並且它可以變得更加容易。 – xanatos