コード例 #1
0
        public static int Calculate(string expression)
        {
            Reset();
            _expression = ParseExpression(expression);
            while (_expression.Size() != 0)
            {
                var curVal = _expression.Pop();
                switch (curVal)
                {
                case " ":
                    continue;
                    break;

                case "+":
                    Sum();
                    break;

                case "*":
                    Mul();
                    break;

                case "=":
                    return(_currentResult.Pop());

                default:
                    _currentResult.Push(int.Parse(curVal));
                    break;
                }
            }
            return(_currentResult.Pop());
        }
コード例 #2
0
        private static Task6.Stack <string> ParseExpression(string expression)
        {
            Task6.Stack <string> result = new Task6.Stack <string>();
            expression = Reverse(expression);
            var splittedExpr = expression.Split(' ');

            foreach (var ch in splittedExpr)
            {
                result.Push(ch);
            }

            return(result);
        }
コード例 #3
0
        public static bool Parse(string brackets)
        {
            Task6.Stack <char> bracketsStack = new Task6.Stack <char>();
            Task6.Stack <bool> stack         = new Task6.Stack <bool>();

            // Проверяем что правых скобочек сбалансированное количество
            foreach (var bracket in brackets)
            {
                bracketsStack.Push(bracket);
            }

            while (bracketsStack.Size() != 0)
            {
                while (bracketsStack.Peek() == ')')
                {
                    bracketsStack.Pop();
                    stack.Push(true);
                }

                while (bracketsStack.Peek() == '(')
                {
                    bracketsStack.Pop();
                    stack.Pop();
                }
            }

            for (int i = 0; i < stack.Size(); i++)
            {
                return(false);
            }

            // Проверяем что левых скобочек сбалансированное количество
            bracketsStack = new Task6.Stack <char>();
            stack         = new Task6.Stack <bool>();

            for (var index = brackets.Length - 1; index >= 0; index--)
            {
                var bracket = brackets[index];
                bracketsStack.Push(bracket);
            }

            while (bracketsStack.Size() != 0)
            {
                while (bracketsStack.Peek() == '(')
                {
                    bracketsStack.Pop();
                    stack.Push(true);
                }

                while (bracketsStack.Peek() == ')')
                {
                    bracketsStack.Pop();
                    stack.Pop();
                }
            }

            for (int i = 0; i < stack.Size(); i++)
            {
                return(false);
            }

            // Если всех скобочек сбалансированно то true
            return(true);
        }
コード例 #4
0
 private static void Reset()
 {
     _expression    = new Task6.Stack <string>();
     _currentResult = new Task6.Stack <int>();
 }