你的程序里面比较明显的错误有如下两个方面:
1、在stack的操作函数中使用了数值结合的方法,导致在调用函数的时候实际上不能修改stack的内容,所以应该采用地址结合的方法;
2、在判断循环结束的时候str[i][j]!='/0'中的斜杠方向反了,应为'\0'
修改后程序可以实现基本的功能,程序如下:
#include
#define MaxSize 40
typedef struct
{
char data[MaxSize];
int top;
}stack;
void initstack(stack* s)
{
s->top=-1;
}
bool push(stack* s,char y)
{
if((s->top)==MaxSize-1) return false;
(s->data)[++(s->top)]=y;
return true;
}
bool pop(stack* s,char *y)
{
if((s->top)==-1) return false;
*y=(s->data)[(s->top)--];
return true;
}
int main()
{
int num,i,j,flag=1;
stack ss;
char c=NULL,str[10][100]={};
scanf("%d",&num);
getchar();//必须有的,消除num的输入带来的影响
//输入字符串的内容
for(i=0;i
initstack(&ss);
for(i=0;i
for(j=0;str[i][j]!='\0';j++)
{
if(str[i][j]=='('||str[i][j]=='{'||str[i][j]=='[')
push(&ss,str[i][j]);
else if(str[i][j]==')')
{
pop(&ss,&c);
if(c=='(') continue;
else { flag=0;break; }
}
else if(str[i][j]==']')
{
pop(&ss,&c);
if(c=='[') continue;
else { flag=0;break; }
}
else if(str[i][j]=='}')
{
pop(&ss,&c);
if(c=='{') continue;
else { flag=0;break; }
}
else continue;
}
if(flag==0) printf("no\n");
else
printf("yes\n");
}
return 0;
}
但是仍然存在问题,逻辑上的,比如一个字符串只给了一个(,而没有后面的),你的程序判断仍然为yes,只是提一个建议,因为没有看到具体你的函数是要实现什么功能。
高手啊