NeQrhk
NeQrhk
采纳率30.6%
2016-01-09 11:00

一道openjduge的题目,谁帮忙看下,括号匹配的问题

1978:扩号匹配问题http://ccnu.openjudge.cn/practice/1978/
查看 提交 统计 提问
总时间限制: 1000ms 内存限制: 65536kB
描述
在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配的括号。不能匹配的左括号用"$"标注,不能匹配的右括号用"?"标注.
输入
输入包括多组数据,每组数据一行,包含一个字符串,只包含左右括号和大小写字母,字符串长度不超过100
注意:cin.getline(str,100)最多只能输入99个字符!
输出
对每组输出数据,输出两行,第一行包含原始输入字符,第二行由"$","?"和空格组成,"$"和"?"表示与之对应的左括号和右括号不能匹配。
样例输入
((ABCD(x)
)(rttyy())sss)(
样例输出
((ABCD(x)
$$
)(rttyy())sss)(

? ?$

我写的代码如下,过不了,出来结果是一样的。

#include"stdio.h"
#include"string.h"
#include"iostream"
#include"stack"
using namespace std;
typedef struct node{
int a;
char ch;
}Node;

int main()
{
char a[105];
int a1[105];
int b1[105];
int i,flag=0,j,k;
Node c,d;
stack b;
while(scanf("%s",a)!=EOF){
for(i=0;i<strlen(a);i++){
if(a[i]=='('){
c.ch=a[i];
c.a=i;
b.push(c);
}
if(a[i]==')'){
if(!b.empty()){
d=b.top();
if(d.ch=='('){
b.pop();
continue;
}
else{
c.a=i;
c.ch=a[i];
b.push(c);
}
}
else{
c.ch=a[i];
c.a=i;
b.push(c);
}
}
else{
continue;
}
}

      k=0;
      while(!b.empty()){
         d=b.top();
         a1[k]=d.a;
         if(d.ch=='('){
         b1[k]=0;
      }
         if(d.ch==')'){
         b1[k]=1;
      }
         k++;
         b.pop(); 
      }
      k--;
      for(i=0;i<strlen(a);i++){
          if(i==a1[k]){
             if(b1[k]==0)
                putchar('$');
             if(b1[k]==1)
                putchar('?');
              k--;
          }
          else{
            putchar(' '); 
          }
      }
      printf("\n");
}
return 0;

}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • NeQrhk NeQrhk 5年前
     #include"stdio.h"
    #include"string.h"
    #include"iostream"
    #include"stack"
    using namespace std;
    typedef struct node{
    int a;
    char ch;
    }Node;
    int main()
    {
    char a[105];
    int a1[105];
    int b1[105];
    int i,flag=0,j,k;
    Node c,d;
    stack<Node> b;
    while(scanf("%s",a)!=EOF){
    for(i=0;i<strlen(a);i++){
    if(a[i]=='('){
    c.ch=a[i];
    c.a=i;
    b.push(c);
    }
    if(a[i]==')'){
    if(!b.empty()){
    d=b.top();
    if(d.ch=='('){
    b.pop();
    continue;
    } 
    else{
    c.a=i;
    c.ch=a[i];
    b.push(c);
    }
    }
    else{
    c.ch=a[i];
    c.a=i;
    b.push(c);
    }
    }
    else{
    continue;
    }
    }
          k=0;
          while(!b.empty()){
             d=b.top();
             a1[k]=d.a;
             if(d.ch=='('){
             b1[k]=0;
          }
             if(d.ch==')'){
             b1[k]=1;
          }
             k++;
             b.pop(); 
          }
          k--;
          for(i=0;i<strlen(a);i++){
              if(i==a1[k]){
                 if(b1[k]==0)
                    putchar('$');
                 if(b1[k]==1)
                    putchar('?');
                  k--;
              }
              else{
                putchar(' '); 
              }
          }
          printf("\n");
    }
    return 0;
    }
    
    点赞 评论 复制链接分享
  • NeQrhk NeQrhk 5年前

    #include"stdio.h"
    #include"string.h"
    #include"iostream"
    #include"stack"
    using namespace std;
    typedef struct node{
    int a;
    char ch;
    }Node;
    int main()
    {
    char a[105];
    int a1[105];
    int b1[105];
    int i,flag=0,j,k;
    Node c,d;
    stack b;
    while(scanf("%s",a)!=EOF){
    for(i=0;i<strlen(a);i++){
    if(a[i]=='('){
    c.ch=a[i];
    c.a=i;
    b.push(c);
    }
    if(a[i]==')'){
    if(!b.empty()){
    d=b.top();
    if(d.ch=='('){
    b.pop();
    continue;
    }
    else{
    c.a=i;
    c.ch=a[i];
    b.push(c);
    }
    }
    else{
    c.ch=a[i];
    c.a=i;
    b.push(c);
    }
    }
    else{
    continue;
    }
    }
    k=0;
    while(!b.empty()){
    d=b.top();
    a1[k]=d.a;
    if(d.ch=='('){
    b1[k]=0;
    }
    if(d.ch==')'){
    b1[k]=1;
    }
    k++;
    b.pop();
    }
    k--;
    for(i=0;i<strlen(a);i++){
    if(i==a1[k]){
    if(b1[k]==0)
    putchar('$');
    if(b1[k]==1)
    putchar('?');
    k--;
    }
    else{
    putchar(' ');
    }
    }
    printf("\n");
    }
    return 0;
    }

    
    
    点赞 评论 复制链接分享
  • qq_27183003 ysuwood 5年前
     点击发表框工具栏上面的代码片图标,把代码放到代码片里,否则粘贴过来,容易出现错误,格式也很乱。
    象这句话这样的格式就对了。
    
    int main()
    {
        char a[105];
        int a1[105];
        int b1[105];
        int i,flag=0,j,k;
        Node c,d;
        stack b;//格式有错误吧?
    
    点赞 评论 复制链接分享

相关推荐