コード例 #1
0
        public string[] GetPostfixNotationEquation(string input)
        {
            List <string>  outputSeparated = new List <string>();
            Stack <string> stack           = new Stack <string>();

            foreach (string c in ParseEquation(input))
            {
                if (!c.ToTryParseToDouble(out _))
                {
                    if (stack.Count > 0 && !c.Equals("("))
                    {
                        if (c.Equals(")"))
                        {
                            string s = stack.Pop();
                            while (s != "(")
                            {
                                outputSeparated.Add(s);
                                s = stack.Pop();
                            }
                        }
                        else if (stack.Peek() != "(" && _calculationOperation.GetPriority(c) > _calculationOperation.GetPriority(stack.Peek()))
                        {
                            stack.Push(c);
                        }
                        else
                        {
                            while (stack.Count > 0 && stack.Peek() != "(" && _calculationOperation.GetPriority(c) <= _calculationOperation.GetPriority(stack.Peek()))
                            {
                                outputSeparated.Add(stack.Pop());
                            }
                            stack.Push(c);
                        }
                    }
                    else
                    {
                        stack.Push(c);
                    }
                }
                else
                {
                    outputSeparated.Add(c);
                }
            }

            if (stack.Count > 0)
            {
                foreach (string c in stack)
                {
                    outputSeparated.Add(c);
                }
            }

            return(outputSeparated.ToArray());
        }
コード例 #2
0
        public void GetPriority_should_return_number_priority(string operand, int priority)
        {
            var result = _calculationOperation.GetPriority(operand);

            Assert.AreEqual(priority, result);
        }