zoukankan      html  css  js  c++  java
  • 九度oj题目1153:括号匹配问题

    题目1153:括号匹配问题

    时间限制:1 秒

    内存限制:32 兆

    特殊判题:

    提交:4866

    解决:2112

    题目描述:

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

    输入:

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

    输出:

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

    样例输入:
    )(rttyy())sss)(
    样例输出:
    )(rttyy())sss)(
    ?            ?$
    来源:
    2010年北京大学计算机研究生机试真题
     1 #include <cstdio>
     2 #include <cstring>
     3 #include <string>
     4 #include <queue>
     5 #include <iostream>
     6 using namespace std;
     7 char s[105];
     8 struct node{
     9     int w;
    10     char c;
    11 };
    12 node stack[105];
    13 int main(){
    14     //freopen("D:\INPUT.txt","r",stdin);
    15     while(scanf("%s",s)!=EOF){
    16         int i,top=0;
    17 
    18         //cout<<s<<endl;
    19 
    20         for(i=0;i<strlen(s);i++){
    21             if(s[i]=='('){
    22                 stack[top].c='(';
    23                 stack[top++].w=i;
    24 
    25                 //cout<<s[i]<<" "<<i<<" "<<top<<endl;
    26 
    27             }
    28             else{
    29                 if(s[i]==')'){
    30                         if(!top||stack[top-1].c!='('){//没有元素
    31                             stack[top].c=')';
    32                             stack[top++].w=i;
    33                         }
    34                         else{
    35                             top--;
    36                         }
    37                     }
    38                 }
    39             }
    40         cout<<s<<endl;
    41 
    42         //cout<<top<<endl;
    43 
    44         for(i=0;i<top;i++){
    45             if(stack[i].c==')'){
    46                 s[stack[i].w]='?';
    47             }
    48             else{
    49                 s[stack[i].w]='$';
    50             }
    51         }
    52         //cout<<s<<endl;
    53         for(i=0;i<strlen(s);i++){
    54             if(s[i]=='?'||s[i]=='$'){
    55                 cout<<s[i];
    56             }
    57             else{
    58                 cout<<' ';
    59             }
    60         }
    61         cout<<endl;
    62     }
    63     return 0;
    64 }
  • 相关阅读:
    直接拿来用 九个超实用的PHP代码片段(二)
    微信开发值得推荐的开源项目
    PHP文件下载原理
    简化PHP开发的10个工具
    CI Weekly #1 | 这份周刊,带你了解 CI/CD 、DevOps、自动化测试
    fir.im Weekly
    fir.im Weekly
    fir.im Weekly
    用 flow.ci 让 Hexo 持续部署
    fir.im Weekly
  • 原文地址:https://www.cnblogs.com/Deribs4/p/4650688.html
Copyright © 2011-2022 走看看