所以这是我的一些作业。我必须创建一个计算器应用程序,要求用户输入然后进行计算。输入必须为公式格式。例如:“ 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个变量(始终出现在方程的左侧),四个基本运算符(+-/ *)且不带括号。
答案 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。