用栈实现检验括号匹配的算法
答案: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();
}
所以要通过其他的方式来判断.其中一个方法如下:
#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;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯