字符串计算

nikolaichow 2013-03-20 02:51:41

string s=string.format("{0}+{1}+{2}-{3)",10,20,30,20);


请问如何将结果40计算出来?
说明:
1、字符串中的运算符包含 + - * / 4种;
2、运算符是通过外部获取的。
...全文
124 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
夜轻风 2013-03-20
  • 打赏
  • 举报
回复
            string s = string.Format("{0}+{1}*{2}-{3}", 10, 20, 30, 20);
            DataTable table = new DataTable();
            object obj = table.Compute(s,"");
            Console.WriteLine(obj);
  • 打赏
  • 举报
回复
简单点的可以用DataTable.Compute
  • 打赏
  • 举报
回复
好像这里面的代码就可以实现js中的eval效果 字符串表达式计算C#程序设计
天下如山 2013-03-20
  • 打赏
  • 举报
回复
传递正能量 2013-03-20
  • 打赏
  • 举报
回复
Calculator c=new Calculator(string.format("{0}+{1}+{2}-{3)",10,20,30,20)); string s=c.ExecuteToString();//这是要的结果 /******************************************** * * http://blog.csdn.net/welliu * * Email:lgjwell@gmail.com * * QQ:147620454 * *******************************************/ using System; using System.Collections.Generic; using System.Text; namespace ExpressionCalculator { /// <summary> /// 表达式计算器 /// </summary> public class Calculator { public Calculator() : this("") { } public Calculator(string expression) { _expression = expression; } private string _expression = string.Empty; private Link_OP _link_OP = null; private Evaluator _eval = new Evaluator(); #region 获取分词 /// <summary> /// 获取后缀分词 /// </summary> public List<string> PostfixWords { get { Analyze(); SyntaxAnalyzer a = new SyntaxAnalyzer(); return a.PostfixWords(_link_OP.Head, _link_OP.Tail); } } /// <summary> /// 获取表达式分词 /// </summary> public List<string> Words { get { Analyze(); TOKENLink link = _link_OP.Head; List<string> wordList = new List<string>(); while (link != null) { if (link.Token.Type == ETokenType.token_operand) { wordList.Add(((TOKEN<IOperand>)link.Token).Tag.ToString()); } else { Operator op = ((TOKEN<Operator>)link.Token).Tag; if (op.Value == "+" || op.Value == "-") { wordList.Add(op.Value + " " + op.Type.ToString()); } else { wordList.Add(op.Value); } } link = link.Next; } return wordList; } } #endregion #region 表达式 /// <summary> /// 获取或赋值表达式 /// </summary> public string Expression { get { return _expression; } set { _expression = value.Trim(); _link_OP = null; } } #endregion /// <summary> /// 检查语法 /// </summary> /// <returns></returns> public bool Check(ref string mes) { bool result = false; try { Analyze(); SyntaxAnalyzer a = new SyntaxAnalyzer(); a.Analyze(_link_OP.Head, _link_OP.Tail); mes = "Success!"; result = true; } catch (Exception ex) { mes = ex.Message; } return result; } /// <summary> /// 表达式式执行 /// </summary> public IOperand Execute() { Analyze(); return _eval.ExpressionEvaluate(_link_OP.Head, _link_OP.Tail); } /// <summary> /// 表达式式执行-返回字符串结果 /// </summary> public string ExecuteToString() { return Execute().ToString(); } /// <summary> /// 解析 /// </summary> private void Analyze() { if (_link_OP == null) { if (_expression.Trim().Length > 0) { PhraseAnalyzer analyze = new PhraseAnalyzer(_expression); _link_OP = analyze.Analyze(); } else { throw new Exception("Error! 表达式为空"); } } } } }
搬砖的码农 2013-03-20
  • 打赏
  • 举报
回复
直接拼接字符串,最后算完了再ToString
wanghui0380 2013-03-20
  • 打赏
  • 举报
回复
这种简单计算你用 DataTable.Compute("10+20+30-20") 就可以搞了 如果是复杂计算你需要一些比较正规的mathParese工具去弄

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧