一道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;

}

acm

3个回答

 点击发表框工具栏上面的代码片图标,把代码放到代码片里,否则粘贴过来,容易出现错误,格式也很乱。
象这句话这样的格式就对了。

int main()
{
    char a[105];
    int a1[105];
    int b1[105];
    int i,flag=0,j,k;
    Node c,d;
    stack b;//格式有错误吧?

#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;
}


 #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;
}
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐