zoukankan      html  css  js  c++  java
  • 【学习笔记】〖九度OJ〗题目1153:括号匹配问题

    题目1153:括号匹配问题

    时间限制:1 秒

    内存限制:32 兆

    特殊判题:

    提交:1759

    解决:786

    题目描述:

        在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号。不能匹配的左括号用"$"标注,不能匹配的右括号用"?"标注.

    输入:

        输入包括多组数据,每组数据一行,包含一个字符串,只包含左右括号和大小写字母,字符串长度不超过100。
        注意:cin.getline(str,100)最多只能输入99个字符!

    输出:

        对每组输出数据,输出两行,第一行包含原始输入字符,第二行由"$","?"和空格组成,"$"和"?"表示与之对应的左括号和右括号不能匹配。

    样例输入:
    )(rttyy())sss)(
    样例输出:
    )(rttyy())sss)(
    ?            ?$
    来源:
    2010年北京大学计算机研究生机试真题
    答疑:
    解题遇到问题?分享解题心得?讨论本题请访问:http://t.jobdu.com/thread-7876-1-1.html
    由于左括号是否匹配需要遍历整个串后才可判断,所以需要记录位置,可以在入栈时直接将左括号所在下标入栈


    #include<iostream>
    #include<stack>
    using namespace std;
     
    int main()
    {
         
        char s[101];
        while (cin >> s)
        {
            stack<int> stk;
     
            int flag[101] = {0};
            char out[101] = {' '};
            int i=0;
            cout << s << endl;
            while (s[i] != '')
            {
                out[i] = ' ';
                if (s[i] == '(')
                {
                    stk.push(i);
                     
                }
                if (s[i] == ')')
                {
                    if (stk.empty())
                    {
                        out[i] = '?';
                    }
                    else
                    {
                        stk.pop();
                    }
                }
                 
                i++;
            }//end of while('')
            while (!stk.empty())
            {
                out[stk.top()] = '$';
                stk.pop();
            }
            cout << out << endl;
        }
     
        return 0;
    }


  • 相关阅读:
    同余 扩展欧几里得
    185. [USACO Oct08] 挖水井
    Dijkstra算法
    Floyed算法
    codves——1079 回家
    codves——1021 玛丽卡
    codves——5960 信使
    计算几何基础
    【正睿oi省选十连测】第一场
    [APIO2012]守卫
  • 原文地址:https://www.cnblogs.com/ymjia/p/3590302.html
Copyright © 2011-2022 走看看