[英]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'形式输入完美方程式的情况
还要注意, string
是char[]
//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.