string expr = Text1.Text;
string[] num = Regex.Split(expr, @"\(|\)|\-|\+|\*|\/").Where(s => !String.IsNullOrEmpty(s)).ToArray(); // get Array for numbers
string[] op = Regex.Split(expr, @"\(|\)|\d{1,3}").Where(s => !String.IsNullOrEmpty(s)).ToArray(); // get Array for mathematical operators +,-,/,*
int firstVal = 0;
int numCtr = 0;
int lastVal = 0;
string lastOp = "";
int num2Cntr = 0;
foreach (string n in num)
{
numCtr++;
if (numCtr == 1)
{
lastVal = int.Parse(n);
}
else
{
if (!String.IsNullOrEmpty(lastOp))
{
switch (lastOp)
{
case "+":
lastVal = lastVal + int.Parse(n) ;
break;
case "-":
lastVal = lastVal - int.Parse(n);
break;
case "*":
lastVal = lastVal * int.Parse(n);
break;
case "/":
lastVal = lastVal / int.Parse(n);
break;
case "(":
numCtr++;
foreach (string a in num)
{
num2Cntr++;
if (num2Cntr == 1)
{
firstVal = int.Parse(a);
}
else
{
if (!String.IsNullOrEmpty(lastOp))
{
switch (lastOp)
{
case "+": firstVal = firstVal + int.Parse(a);
break;
case "-":
firstVal = firstVal - int.Parse(a);
break;
case "*":
firstVal = firstVal * int.Parse(a);
break;
case "/":
firstVal = firstVal / int.Parse(a);
break;
}
}
}
}
break;
case ")":
lastVal = lastVal + firstVal;
return;
}
}
}
int opCtr = 0;
foreach (string o in op)
{
opCtr++;
if (opCtr == numCtr)
{
lastOp = o;
break;
}
}
}
Text2.Text = lastVal.ToString();
1)括弧の優先順位を高く設定するには? 2) 入力された式はバイナリ ツリーのように評価される必要があるため、優先順位を設定しようとしています。最初に括弧の優先度を高くし、次に演算子の優先度を高くする必要があります。3) 上記の私のコードは正常に動作し、式を左から右に評価します。つまり、5+6+7=18 ですが、5+(5+5)+(5*2) を与えると、結果は 40 になります。しかし、正確な結果は 25 です。ありがとうございました。