#include
#include
#include
#define STACK_SIZE 100
/*external variables*/
char contents[STACK_SIZE];
int top=0;
void make_empty(void);
bool is_empty(void);
bool is_full(void);
void push(char i);
char pop(void);
int stack_overflow(void);
void stack_underflow(void);
void read_line(char str[]);
int main(void)
{
int i,len;
make_empty();
printf("Enter parenteses and/or braces: ");
read_line(contents);
len=strlen(contents);
for(i=0;i<=len;i++)
{
switch(contents[i]){
case '(':push(contents[top]);
break;
case '{':push(contents[top]);
break;
case ')':if(pop()=='(')
break;
else{printf("Unmatched!");
goto END;}
case '}':if(pop()=='{')
break;
else{printf("Unmatched!");
goto END;}
case '\n':if(is_empty())
printf("Matched!");
else printf("Unmatched!");
}
}
END:
return 0;
}
void make_empty(void)
{
top=0;
}
bool is_empty(void)
{
return top==0;
}
bool is_full(void)
{
return top==STACK_SIZE;
}
void push(char i)
{
if (is_full())
{
stack_overflow();
}
else
contents[top++]=i;
}
char pop(void)
{
if (is_empty())
stack_underflow();
else
return contents[--top];
}
int stack_overflow(void)
{
printf("Stack overflow!");
return 1;
}
void stack_underflow(void)
{
printf("Stack underflow!");
}
void read_line(char str[])
{
int len,i=0;
do{if(i<STACK_SIZE)
str[i++]=getchar();
}while(str[i-1]!='\n');}请问为什么我输入()()的时候显示匹配,输入(){}的时候就显示不匹配了?我调试之后发现每次到}的时候程序就把pop()作为假了,我不知道为什么?请问是我的数组下标有问题吗?谢谢~
求大神帮我看看这个简单的栈调用,新手程序媛不胜感激!
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答
悬赏问题
- ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
- ¥15 用windows做服务的同志有吗
- ¥60 求一个简单的网页(标签-安全|关键词-上传)
- ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
- ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
- ¥100 为什么这个恒流源电路不能恒流?
- ¥15 有偿求跨组件数据流路径图
- ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
- ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
- ¥15 一直显示正在等待HID—ISP