• 括号匹配的栈实现


    括号匹配的栈实现

    问题:判断一个文本中,括号是否匹配?

    思路:从头到尾扫描字符串,每次遇到左括号(如'(', '[', '{')就压入堆栈,如果遇到右括号(如')', ']', '}')就与栈顶元素比较,如果成对,OK,否则判断不匹配。

    代码如下:

    #include <iostream>
    #include <stack>
    #include <set>
    #include <string>
    
    using namespace std;
    
    /*
     * vaild return true, else return false
     */
    bool judge_bracket(const string & str)
    {
        stack<char> st;
    
        set<char> left;
        set<char> right;
    
        left.insert('(');
        left.insert('[');
        left.insert('{');
    
        right.insert(')');
        right.insert(']');
        right.insert('}');
    
        for (int i=0; i!=str.size(); i++) {
    
            set<char>::iterator it1 = left.find(str[i]);
            set<char>::iterator it2 = right.find(str[i]);
    
            if (it1 != left.end()) {        // match left
                st.push(str[i]);
    
            } else if (it2 != right.end()) {    // match right
    
                if (st.size() == 0 ) return false;  // stack is empty
    
                if (str[i] - st.top() <= 2 ) {    // 右括号的ASCII码比其成对的左括号大1或2
                    st.pop();
    
                } else {
                    cout << "str[i]=" << str[i] << "top=" << st.top() <<endl;
                    return false;
                }
            }
        }
    
        return true;
    }
    
    int main(int argc, char* argv[])
    {
        string test_buffer[5] = {"]({[", "({[]})","([)]{}","(()[{}])","{[((()))]([])}"};
    
        //test
        for (int i=0; i<5; i++)
        {
            cout << "The string is "" << test_buffer[i] << "", The result is "
                << (judge_bracket(test_buffer[i]) ? "matched" : "not matched" ) << endl;
        }
    
        return 0;
    }
  • 相关阅读:
    时间差的计算
    时间差的计算第二篇
    并不能完全不编码完成Windows Service的安装和卸载
    今年是搜索引擎年吗?热!搜索引擎算法点击率火爆
    Virtual PC,我真的不敢用你!
    我理解的17种C#写的Hello World程序
    反搜索引擎
    如何保证Windows Serverice健壮长效运转?
    服务器是怎么做成的?
    超酷的超级DataGrid
  • 原文地址:https://www.cnblogs.com/chenny7/p/4063284.html
Copyright © 2020-2023  润新知