• 九度OJ1153-括号匹配-栈的应用


    题目1153:括号匹配问题

    时间限制:1 秒

    内存限制:32 兆

    特殊判题:

    提交:9697

    解决:4213

    题目描述:

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

    输入:

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

    输出:

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

    样例输入:
    )(rttyy())sss)(
    样例输出:
    )(rttyy())sss)(
    ?            ?$
    来源:
    2010年北京大学计算机研究生机试真题
    #include <iostream>
    #include <algorithm>
    #include <stdio.h>
    #include <string>
    #include <ctype.h>
    #include <stack>
    
    using namespace std;
    
    stack<int> S;
    
    char aa[101];
    char bb[101];
    
    int main()  {
        while(scanf("%s", aa) != EOF)  {
            int i;
            for(i = 0; aa[i] != 0; i++) {
                if(aa[i] == '(')    {
                    S.push(i);
                    bb[i] = ' ';
                }
                else if(aa[i] == ')')   {
                    if(S.empty() == false)  {
                        S.pop();
                        bb[i] = ' ';
                    }
                    else bb[i] = '?';
                }
                else    bb[i] = ' ';
            }
            while(!S.empty())   {
                bb[S.top()] = '$';
                S.pop();
            }
            bb[i] = 0;
            puts(aa);
            puts(bb);
        }
    
    
    
        return 0;
    }

    注意细节,比如对char数组的输入,没有&,

    还有i在这里不是for的局部变量,为了能使输出形成字符串,要在最后一个字符后添加一个空字符

  • 相关阅读:
    第六周
    第五周(实验报告)
    第四周(实验报告)
    第三周(实验报告)
    Java第二周学习总结
    第一周
    2019课程总结
    第十四周课程总结
    第十三周总结
    第十二周总结
  • 原文地址:https://www.cnblogs.com/QingHuan/p/7202322.html
Copyright © 2020-2023  润新知