永发信息网

用栈实现检验括号匹配的算法

答案:2  悬赏:70  手机版
解决时间 2021-02-04 19:06
  • 提问者网友:你挡着我发光了
  • 2021-02-04 10:00
没啥具体描述,数据结构的知识,急用,有重赏
最佳答案
  • 五星知识达人网友:执傲
  • 2021-02-04 10:09
即使没有括号,本来top和base就是等的.所以只有在你输入一个括号的情况下才会显示不匹配.
所以要通过其他的方式来判断.其中一个方法如下:
#include
#include
#include
char *base;
char *top;
char ch;
bool fa=false;
void main(){
base=(char*)malloc(sizeof(char)*50);
if(!base) exit(1);
top=base;
ch=getchar();
while(ch!='\n'){
if(ch=='('||ch=='['||ch=='{')
*top=ch,top++;
if((ch==')'&&*(top-1)=='(')||(ch==']'&&*(top-1)=='[')||(ch=='}'&&*(top-1)=='{'))
top--,fa=true;
ch=getchar();
}
if(fa)printf("匹配");
else printf("不匹配");
getch();
}
全部回答
  • 1楼网友:渡鹤影
  • 2021-02-04 10:39
#include <stdio.h> #include <string.h> #define MAX_STACK 100 struct stStack { char szStack[MAX_STACK]; int nTop; }; void InitStack(stStack& s) { s.nTop = -1; } char Push(stStack& s, char c) { if (s.nTop == MAX_STACK - 1) return 0; s.nTop ++; s.szStack[s.nTop] = c; return c; } char Pop(stStack& s) { if (s.nTop == -1) return 0; char c = s.szStack[s.nTop]; s.nTop--; return c; } int Check(char* szText) { stStack s; InitStack(s); int nLen = strlen(szText); for (int i = 0; i < nLen; i++) { char c = szText[i]; switch (c) { case '(': case '{': case '[': Push(s, c); break; case ')': if (Pop(s) != '(') return 0; break; case '}': if (Pop(s) != '{') return 0; break; case ']': if (Pop(s) != '[') return 0; break; } } return 1; } int main() { char szText[100]; scanf("%s", szText); if (Check(szText)) { printf("合法\n"); } else { printf("失败\n"); } return 0; }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯