【问题标题】:split string c# based on math operator基于数学运算符拆分字符串c#
【发布时间】:2015-04-11 12:50:54
【问题描述】:

(计算器程序)用数学基本顺序一步计算

如果有一个字符串 = "5+2*6/9"(这是用户输入)如何获得数字 2 和 6? 我一直在尝试拆分,但如果没有'+'它会失败:(

这是我的代码 atm

 string[] a = kalimat.Split('*');
                        string[] a1 = a[0].Split('+');
                        string[] a2 = a1[a1.Count() - 1].Split('-');
                        string[] b1 = a[1].Split('+');
                        string[] b2 = b1[0].Split('-');
                        ang1 = a2[a2.Count() - 1];
                        ang2 = b2[0];
                        angka1 = Convert.ToDouble(ang1);
                        angka2 = Convert.ToDouble(ang2);
                        hasil = angka1 * angka2;

有什么想法吗?

【问题讨论】:

  • 你有一个模式可以一直拆分吗?例如;与* 拆分并获取第一项的最后一个字符并获取第二项的第一个字符?
  • 你的目的是什么?你想计算得到公式的结果吗?
  • 我的目的是做一个像windows 7一样的计算器,所以所有在一个文本和我的程序计算它
  • 对不起,我的意思是像谷歌计算器一样,毕竟已经输入,我的程序计算它

标签: c# split


【解决方案1】:

如果您的输入表达式始终采用以下形式:“[某个数字]+[您要返回的第一个值]*[您要返回的第二个值]”那么这应该适合您:

var reg = new System.Text.RegularExpressions.Regex(@"\d\+(\d)\*(\d)");
var result = reg.Match("5+2*6/9");
var first = result.Groups[1];
var second = result.Groups[2];

您当然可以调整正则表达式搜索模式以满足您的需要。

【讨论】:

  • 嗯,它实际上是用户输入,所以它的变化
  • 嗯,您知道这是您应该在问题中包含的信息的完美示例。我们大多数人都不是读心术的人。
【解决方案2】:

解析任意数学表达式并非易事。如果这不是需要您手动进行解析的作业,我建议您找一个库来完成这项任务,例如NCalc

您可以从Nuget 安装它,并使用以下简单代码:

var kalimat = "5+2*6/9";
var hasil = new NCalc.Expression(kalimat).Evaluate();
Console.WriteLine(hasil);

Selamat mencoba :)

【讨论】:

  • 哇,这看起来很简单..虽然太糟糕了这是一个家庭作业:(所以没有库只是基本的拆分或任何字符串函数..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-31
相关资源
最近更新 更多