示例#1
0
        static bool IsCorrectParentheses(string t)
        {
            string     begin = "{([", end = "})]";
            ArrayStack stack = new ArrayStack(t.Length);

            for (int i = 0; i < t.Length; i++)
            {
                if (begin.IndexOf(t[i].ToString()) >= 0)
                {
                    stack.push(t[i]);
                }
                else
                {
                    int j = end.IndexOf(t[i].ToString());
                    if (j >= 0)
                    {
                        if (stack.isEmpty() || !stack.pop().Equals(begin[j]))
                        {
                            return(false);
                        }
                    }
                }
            }
            return(stack.isEmpty());
        }
示例#2
0
        static string InfixToPostfix(string text)
        {
            string text1 = "";

            ArrayStack data = new ArrayStack(text.Length);

            if (IsCorrectParentheses(text))
            {
                for (int i = 0; i < text.Length; i++)
                {
                    char token = text[i];
                    if (IsOperator(token))
                    {
                        int p = Lv(token);
                        while (!data.isEmpty() && Lv((char)data.peek(), true) >= p)
                        {
                            text1 += data.pop();
                        }
                        if (token.Equals(')'))
                        {
                            data.pop();
                        }
                        else
                        {
                            data.push(token);
                        }
                    }
                    else
                    {
                        text1 += text[i];
                    }
                }
            }
            while (!data.isEmpty())
            {
                text1 += data.pop();
            }
            return(text1);
        }