使用C#创建一个简单的方程式计算器

时间:2018-09-01 06:34:57

标签: c#

所以这是我的一些作业。我必须创建一个计算器应用程序,要求用户输入然后进行计算。输入必须为公式格式。例如:“ x = 3 + 8”,“ x = 6-3”或x =“ 6-3 * 9”。 我解决这个问题的方法是首先分解字符串用户输入,并将其存储到char数组中:

private char[] userInput;
string input = Console.ReadLine();
input = input.Replace(" " ,"");
userInput = input.ToCharArray();

这时,userInput将包含输入中的所有字符。接下来,我通过遍历数组查找方程的变量,这应该给我找到的第一个字母字符:

char var = 'x';
for (int i = 0; i < userInput.Length; i++)
{
     char c = userInput[i];
     if (Char.IsLetter(c)){
         var = c;
         break;
     }
}

接下来,我将用变量的一侧分解方程式,将所有数字和运算符的另一侧分解,以'='分隔,然后将所有数字和运算符添加到新的char数组中:

//get '=' position
int equalPos = 0;
for (int i = 0; i < userInput.Length; i++)
{
    char c = userInput[i];
    if (Char.IsSymbol(c))
    {
       if (c.Equals('='))
          {
              equalPos = i;
              break;
           }
     }
}
//add equation to new array
rightSide = new char[userInput.Length-equalPos];
int a = 0;
for (int i = equalPos + 1; i < userInput.Length; i++)
{
    char c = userInput[i];
    rightSide[a] = c;
    a++;
}

这时,rightSide数组将包含所有数字和运算符作为字符。我可以使用System.Data.DataTable().Compute()来计算这部分。但是,如果不允许我使用任何库,该如何实现呢?该方程只应包含1个变量(始终出现在方程的左侧),四个基本运算符(+-/ *)且不带括号。

2 个答案:

答案 0 :(得分:0)

如果首先使用<script src=" https://cdnjs.cloudflare.com/ajax/libs/three.js/96/three.min.js"></script> <canvas id="c"></canvas>运算符分割字符串,则将获得右侧和左侧。因此,在等式的右侧,如果等式为'x = 6 * 2 + 1',则为'6 * 2 + 1',因此我们可以计算该值,并使用循环和开关遵循标准BIDMAS规则:

我已删除所有错误检查,此解决方案适用于用户以'x = {equation}'或'{equation} = x'的形式输入理想方程式

还要注意,=string

char[]

使用BIDMAS,而忽略方括号和索引,我们首先计算除法和乘法。

//get user input
Console.Write("Enter equation:");
string input = Console.ReadLine();
string[] splitInput = input.Split('=');
int index = char.IsLetter(splitInput[0].Replace(" ", "")[0]) ? 1 : 0;
string sideWithEquation = splitInput[index];

//Compute right hand side
string[] equation = sideWithEquation.Split(' ');

然后我们加减法

    //compute for * and /
    for (int i = 1; i < equation.Length - 1; i++)
    {
        string item = equation[i];
        int num = 0;
        switch (item)
        {
           case "*":
                num = Convert.ToInt32(equation[i - 1]) * Convert.ToInt32(equation[i + 1]);
                break;
            case "/":
                num = Convert.ToInt32(equation[i - 1]) / Convert.ToInt32(equation[i + 1]);
                break;
        }
        if (num > 0)
        {
             equation[i - 1] = "";
             equation[i] = "";
             equation[i + 1] = num.ToString();
         }
     }

然后再次向用户显示x的值

//Now compute for + and -
 equation = string.Join(" ", equation).Split(' ');
 for (int i = 1; i < equation.Length - 1; i++)
 {
      string item = equation[i];
      int num = 0;
      switch (item)
      {
           case "+":
              num = Convert.ToInt32(equation[i - 1]) + Convert.ToInt32(equation[i + 1]);
              break;
           case "-":
              num = Convert.ToInt32(equation[i - 1]) - Convert.ToInt32(equation[i + 1]);
              break;
      }
      if (num > 0)
      {
            equation[i - 1] = "";
            equation[i] = "";
            equation[i + 1] = num.ToString();
      }
  }

答案 1 :(得分:0)

您的答案可以分为两部分 第一如何将char数组转换为字符串类型 第二如何将字符串转换为可执行代码块  对于第一部分,请使用以下方法:

char[] chars;
string s = new string(chars);

对于第二部分太困难了,要找到一种没有任何预写代码的方法,那么您必须使用Microsoft.CSharp.CSharpCodeProvider来编译代码即时。特别是,搜索CompileAssemblyFromFile