第五周项目三—括号的匹配
2017-10-24 21:32
295 查看
/* * Copyright (c) 2017,烟台大学计算机学院 * All right reserved. * 文件名称:main.cpp * 作者:王华慧 * 完成日期:2017年10月24日 * 版本号:v1.0 * * 问题描述:括号匹配问题 * 输入描述:标准函数输入 * 程序输出:标准函数输出 */
假设表达式中允许三种括号:圆括号、方括号和大括号。编写一个算法,判断表达式中的各种左括号是否与右括号匹配。
例如,输入2+(3+4)*2+{[3]}-8,输出匹配正确;输入2+(3+4*{2)+{[3]}-8,输出匹配错误。
sqstack.h中 存放头文件
#ifndef SQSTACK_H_INCLUDED #define SQSTACK_H_INCLUDED #define MaxSize 100 typedef char ElemType; typedef struct { ElemType data[MaxSize]; int top; //栈指针 } SqStack; //顺序栈类型定义 void InitStack(SqStack *&s); //初始化栈 void DestroyStack(SqStack *&s); //销毁栈 bool StackEmpty(SqStack *s); //栈是否为空 int StackLength(SqStack *s); //返回栈中元素个数——栈长度 bool Push(SqStack *&s, ElemType e); //入栈 bool Pop(SqStack *&s, ElemType &e); //出栈 bool GetTop(SqStack *s, ElemType &e); //取栈顶数据元素 void DispStack(SqStack *s); //输出栈 #endif // SQSTACK_H_INCLUDED #pragma oncesqstack.cpp 存放定义
#include <stdio.h> #include <malloc.h> #include "sqstack.h" void InitStack(SqStack *&s) { s = (SqStack *)malloc(sizeof(SqStack)); s->top = -1; } void DestroyStack(SqStack *&s) { free(s); } int StackLength(SqStack *s) //返回栈中元素个数——栈长度 { return(s->top + 1); } bool StackEmpty(SqStack *s) { return(s->top == -1); } bool Push(SqStack *&s, ElemType e) { if (s->top == MaxSize - 1) //栈满的情况,即栈上溢出 return false; s->top++; s->data[s->top] = e; return true; } bool Pop(SqStack *&s, ElemType &e) { if (s->top == -1) //栈为空的情况,即栈下溢出 return false; e = s->data[s->top]; s->top--; return true; } bool GetTop(SqStack *s, ElemType &e) { if (s->top == -1) //栈为空的情况,即栈下溢出 return false; e = s->data[s->top]; return true; } void DispStack(SqStack *s) //输出栈 { int i; for (i = s->top; i >= 0; i--) printf("%c ", s->data[i]); printf("\n"); }主函数
#include <stdio.h> #include "sqstack.h" #include <iostream> bool isMatch(char *st) { int d = 1, i; char c; SqStack *s; InitStack(s); for (i = 0; st[i] != '\0'&&d; i++) { switch (st[i]) { case'(': case'[': case'{': Push(s, st[i]); break; case')': Pop(s, c); if (c != '(') d = 0; c = '0'; break; case']': Pop(s, c); if (c != '[') d = 0; c = '0'; break; case'}': Pop(s, c); if (c != '{') d = 0; c = '0'; break; } } if (StackEmpty(s) && d == 1) return true; else return false; } int main() { char st[50]; printf("请输入表达式:"); scanf("%s", st); if (isMatch(st)) printf("配对正确!!\n"); else printf("配对错误!!\n"); system("pause"); return 0; }运行结果