用C#为计算器拆分字符串

用C#为计算器拆分字符串,c#,asp.net,code-behind,C#,Asp.net,Code Behind,我正在ASP.NET中创建一个简单的计算器。当用户选择按钮时,该值将添加到单个文本框中。选择equal按钮后,字符串将被发送到ASP.NET服务器(im使用c#代码隐藏文件)。假定c#代码将此字符串分开,计算一个值,然后将值返回到同一文本框。我正在使用一个名为calculation的类,它有一个加法、减法、乘法和除法(这是必需的) 我很难确定拆分整个字符串的最佳方法,例如3*4/65+1 我不确定实现这一目标的最佳方式是什么。下面是我在c#文件中的代码,虽然不多。谢谢你的帮助/提示 usin

我正在ASP.NET中创建一个简单的计算器。当用户选择按钮时,该值将添加到单个文本框中。选择equal按钮后,字符串将被发送到ASP.NET服务器(im使用c#代码隐藏文件)。假定c#代码将此字符串分开,计算一个值,然后将值返回到同一文本框。我正在使用一个名为calculation的类,它有一个加法、减法、乘法和除法(这是必需的)

我很难确定拆分整个字符串的最佳方法,例如3*4/65+1

我不确定实现这一目标的最佳方式是什么。下面是我在c#文件中的代码,虽然不多。谢谢你的帮助/提示

  using System; 
  using System.Collections.Generic;
  using System.Linq;
  using System.Web;
  using System.Web.UI;
  using System.Web.UI.WebControls;

   public partial class Assign2_Calc : System.Web.UI.Page
  {
    protected void ButtonEqual_Click(object sender, EventArgs e)
    {
    string inputStr = inputBox.Text;
    double result = 0;;
    Calculator myCalculator = new Calculator();
    switch ()
    {
        case "+":
            result = myCalculator.Add(val1, val2);
            break;
    }


    inputBox.Text = result.ToString();
    }  
    }

对于简单表达式,可以使用以下方法:

还有一些第三方库,您可能会发现它们很有用。

您可以在正则表达式中使用带捕获括号的,以便返回表达式的运算符和参数,例如:

Regex.Split("([+-/*()])")
使用示例表达式:
3*4/65+1
,结果将是:
{“3”、“*”、“4”、“/”、“65”、“+”、“1”}

使用带有未实现运算符的表达式:
3*2^2/65+1
,结果将是:
{“3”、“*”、“2^2”、“/”、“65”、“+”、“1”}


您将得到一个字符串数组,希望其中包含单独的参数和运算符。您必须检查每个字符串中的无效元素,例如未实现的运算符或其他无效字符(例如,
^
\
)。如果拆分数组中的任何字符串不仅是有效参数或运算符,您将返回一个错误结果。

Nice:),但用户要求完成作业,只需抛出一些不起作用且没有意义的代码即可。。。然后等着解决它——让解析成为代码的一部分。问题是关于如何拆分表达式字符串的提示。这只是给出了结果,这不是问题。因为当提供最终结果和实现最终结果的精确方法时,被认为是错误的,所以?我认为最终目标是评估表达式,这就是我提供的答案。问题中关于断开字符串的部分可能仅仅是因为OPs缺乏框架中内置方法的知识,这些方法将允许他编写容易出错的代码并重新发明。当然,如果你想重新发明轮子,请随时提供你认为问题所在的答案。我同意问题的细节可能是因为缺乏知识,但我一直处于与此相同的情况,并且由于内置.NET方法的限制,决定使用我自己的代码。我们不应该做出这样的假设。作为一个提问者,当我收到一个试图以我已经拒绝的方式解决整个问题的答案,而不是仅仅回答我提出的问题时,我会感到非常沮丧。例如,对于
6+4/2
,这种方法会得到什么回报?5或8?L.B,对于
6+4/2
您将得到一个数组:
{“6”、“+”、“4”、“/”、“2”}
。对于
6+(4/2
?(无关闭偏执)或
6+4)/2
,对于
6+(4/2
,使用
Regex.Split([+-/*])”
,您将得到
{6',“+”,“,”,“/”,“2}
,这显然是无效的。您必须扩展
Split
regex以包含括号来处理此问题:
regex.Split(([+-/*()])
将给出
{“6”、“+”、“(”、“4”、“/”、“2”}
,然后检查匹配的括号对。那么现在你说你已经发布了一个好的答案?我正在等待一个答案来涵盖这些问题。(如果它如此简单,请发布一个工作代码)
Regex.Split("([+-/*()])")