永发信息网

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

答案:2  悬赏:70  手机版
解决时间 2021-02-04 19:06
没啥具体描述,数据结构的知识,急用,有重赏
最佳答案
即使没有括号,本来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 <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; }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
为什么小樱的力气变大了
只有左脸长斑明显,请问这是什么状况?
《dj 烟仔 极品慢摇英文 rnb 串烧》中第一首
吉林的大连自驾怎样走
【有甲乙两个粮仓,如果从乙仓库运走25t粮食,
软件开发专业课程表
曾国藩祖父是谁
宗教法律法规是否有认可寺院存放骨灰盒的依据
下列说法中,错误的是()A.消费型增值税是指
接到一个自称海尔招聘人员的电话,用手机打的
找以下的图片
缙云县质量技术监督局地址有知道的么?有点事
女,48岁。近日吞咽梗阻,胸膈痞闷,情志舒畅
亲!开艾灸馆需要什么条件?
法律服务所我想知道这个在什么地方
推荐资讯
小明有面值2角和5角的邮票共12枚,面值总额39
苹果6升级IOS9.1要不要备份什么
四川五星级酒店有哪些。
我申请的信用卡4月11日己通过审核、几号能收
合众轩怎么去啊,我要去那办事
金融自由化的主要内容包括()。Ⅰ.取消对存
梅家园村地址好找么,我有些事要过去
北京西站要去天安门应该从哪个出口出来?
淮安市淮阴区黄河花园八组团业主委员会地址有
移动手机号丢了,忘了充值结果成空号了,还能
丰城供电所(车田24小时营业厅)怎么去啊,我要
People who traveled in the past had to put
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?