C#递归实现加减乘除括号的运算

 效果:

77a8046c25364edeaf20cc4978e7cdd7.png

代码:

// 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);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_50906930/article/details/127710456