这是我的一些家庭作业。我必须创建一个计算器应用程序,它要求用户输入,然后计算它。输入必须采用公式格式。例如:“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()来计算这一部分。但是,如果我不被允许使用任何库,我如何实现它?方程式应该只包含一个变量(总是出现在方程式的左侧),四个基本运算符(+-/*),并且没有括号。
发布于 2018-09-01 20:35:33
如果首先通过=操作符拆分字符串,则会得到字符串的左右两端。因此,在等式的右侧,如果方程是'x =6*2+ 1',我们就有'6 *2+ 1',所以我们可以计算它并使用循环和开关遵循标准的BIDMAS规则:
我已经删除了所有的错误检查,这个解决方案适用于当用户输入形式为'x ={方程}‘或’{方程}= 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)}" ); 发布于 2018-09-01 20:56:22
你的答案可以分为两部分First如何将字符数组转换为string类型Second如何将字符串转换为first part的可执行代码块使用以下方法:
char[] chars;
string s = new string(chars);对于Second part,IT是DIFFiCULT,如果没有任何预先编写的代码就无法找到这样做的方法,那么您必须使用Microsoft.CSharp.CSharpCodeProvider动态编译代码。特别是,搜索CompileAssemblyFromFile。
https://stackoverflow.com/questions/52125547
复制相似问题