簡體   English   中英

使用C#創建一個簡單的方程式計算器

[英]Creating a simple equation calculator with 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個變量(始終出現在方程式的左側),四個基本運算符(+-/ *)且不帶括號。

如果首先用=運算符分割字符串,則將獲得右側和左側。 因此,在等式的右側,如果等式為'x = 6 * 2 + 1',則為'6 * 2 + 1',因此我們可以計算該值,並使用循環和開關遵循標准BIDMAS規則:

我已刪除所有錯誤檢查,此解決方案適用於用戶以'x = {equation}'或'{equation} = x'形式輸入完美方程式的情況

還要注意, stringchar[]

//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(' ');

使用BIDMAS,並忽略方括號和索引,我們首先計算除法和乘法。

    //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();
         }
     }

然后我們加減法

//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();
      }
  }

然后再次向用戶顯示x的值

  string total = string.Join("", equation);     
  //display what x is
  Console.WriteLine($"x = {int.Parse(total)}" ); 

您的答案可以分為兩部分: 第一如何將char數組轉換為字符串類型第二如何將字符串轉換為可執行代碼塊對於第一部分,請使用以下方法:

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

對於第二部分, 它太難找到一種沒有任何預編寫代碼的方法,那么您必須使用Microsoft.CSharp.CSharpCodeProvider即時編譯代碼。 特別是,搜索CompileAssemblyFromFile

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM