效果:
代码:
// See https://aka.ms/new-console-template for more information
using System.Text.RegularExpressions;
string str = Console.ReadLine();
if (str == null) return;
char[] arr = str.ToCharArray();
S s = new S(arr);
Console.WriteLine(s.calculate());
public class S
{
int index;
char[] arr;
public S(char[] arr)
{
this.index = 0;
this.arr = arr;
}
public float calculate(float value = 0,bool tag = false)
{
if(index >= arr.Length) return value;
if (arr[index].ToString() == ")") return value;
string _operator = "";
string str_value = "";
int _value = 0;
Regex num_regex = new Regex(@"\d");
Regex op_regex = new Regex(@"[+\-*/]");
if (op_regex.IsMatch(arr[index].ToString()))
{
_operator = arr[index].ToString();
index++;
}
if (arr[index].ToString() == "(")
{
index++;
_value = (int)calculate();
//Console.WriteLine(_value);
index++;
}
for (; index < arr.Length;)
{
if (num_regex.IsMatch(arr[index].ToString()))
{
str_value += arr[index];
index++;
}
else break;
}
string _operator_ed = "";
if (index < arr.Length && op_regex.IsMatch(arr[index].ToString()))
{
_operator_ed = arr[index].ToString();
}
if (num_regex.IsMatch(str_value))
{
_value = int.Parse(str_value);
}
if (_operator == "-")
{
if (_operator_ed == "-" || _operator_ed == "+" || _operator_ed == "")
value -= _value;
else
value -= calculate(_value, true);
}
else if (_operator == "*")
{
value *= _value;
}
else if (_operator == "/")
{
value /= _value;
}
else
{
if (_operator_ed == "-" || _operator_ed == "+" || _operator_ed == "")
value += _value;
else
value += calculate(_value, true);
}
if (tag) return value;
return calculate(value);
}
}