用c语言顺序栈写这个程序括号匹配 特别是按1继续按0退出
1条回答 默认 最新
- hubei_dxx 2021-06-24 09:21关注
#include <stdio.h> #include <stdlib.h> #include <string.h> #define CSTACK_SIZE 100 struct CStack { char e[CSTACK_SIZE]; int top; }; struct CStack* CreateStack() { struct CStack *pStack = (struct CStack*)malloc(sizeof(struct CStack)); pStack->top = -1; return pStack; } void DestroyStack(struct CStack* s) { free(s); } void PushStack(struct CStack* s, char c) { if (s->top >= CSTACK_SIZE) { printf("stack is full\n"); return; } s->top++; s->e[s->top] = c; } char PopStack(struct CStack* s) { char c = '\0'; if (s->top < 0) { printf("stack is empty\n"); return c; } c = s->e[s->top]; s->top--; return c; } int IsEmpty(struct CStack* s) { if (s->top < 0) { return 1; } else { return 0; } } char GetTop(struct CStack* s) { if(IsEmpty(s)) { return '\0'; } return s->e[s->top]; } int match(char a,char b){ if(a+1==b||a+2==b)//成对的左右括号的ASCII码相差1或者2 return 1; return 0; } int check(char str[]) { int i, len = 0; char c; struct CStack* s; len = strlen(str); s = CreateStack(); for (i = 0; i < len; i++) { switch(str[i]) { case '{': case '[': case '(': PushStack(s, str[i]); break; case '}': case ']': case ')': if (IsEmpty(s)) { DestroyStack(s); return 0; } else { c = GetTop(s); if (match(c, str[i])) { PopStack(s); } else { DestroyStack(s); return 0; } } } } if (IsEmpty(s)) { DestroyStack(s); return 1; } else { DestroyStack(s); return 0; } } int main(int argc, char* argv[]) { char str[64] = {0}; char c='1'; const char* msg = "==========================================\n" "是否继续游戏?按1==继续,按0退出,请选择!\n" "==========================================\n"; do { gets(str); switch(strlen(str)) { case 1: c = str[0]; break; default: if(check(str) == 1) { printf("匹配正确!\n%s", msg); } else { printf("匹配错误!\n%s", msg); } } } while (c!='0'); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 metadata提取的PDF元数据,如何转换为一个Excel
- ¥15 关于arduino编程toCharArray()函数的使用
- ¥100 vc++混合CEF采用CLR方式编译报错
- ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
- ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
- ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
- ¥50 如何openEuler 22.03上安装配置drbd
- ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
- ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
- ¥15 Windows11, backspace, enter, space键失灵