頭文件中函數
#include<stdio.h> #include<stdlib.h> typedef char Elem; typedef int status; #define MAXSIZE 100 #define ERROR 0 #define OK 1 typedef struct{ Elem data[MAXSIZE]; int top; }SqStack; //初始化 void Initstack(SqStack &S) { if(!S.data) exit(-1); S.top = 0; } //入棧 status Push(SqStack &S,Elem e) { if(S.top==MAXSIZE) { printf("棧滿了\n"); return ERROR; } S.data[S.top++] = e; return OK; } //出棧 status Pop(SqStack &S) { if(S.top==0) return ERROR; S.top--; } //得到棧頂元素 status getTop(SqStack S,Elem &e) { if(S.top==0) return ERROR; e = S.data[S.top-1]; return OK; }
//括號匹配 status Match(SqStack &S) { printf("---------------輸入想要匹配的括號-----------------\n\n"); printf(" 括號範圍[]、{}、()\n"); char str[MAXSIZE]; gets(str); printf("\n"); Elem pre = '#';//假如第一個括號是右括號,則與其匹配,固然確定匹配錯誤 int i=0; while(str[i]!='\0') { if(str[i]=='{'||str[i]=='['||str[i]=='(') { Push(S,str[i]); i++; continue; } if(getTop(S,pre)) { if((pre=='{'&&str[i]=='}')||(pre=='['&&str[i]==']')||(pre=='('&&str[i]==')')) { Pop(S); i++; }else{ printf("匹配錯誤\n"); printf("\n"); printf("----------------------end----------------------"); return ERROR; } }else{ printf("棧空了或輸入的第一個是左括號\n\n"); printf("----------------------end-------------------------"); return ERROR; } } if(S.top==0){ printf("匹配成功\n"); printf("\n"); printf("-----------------------end-------------------------"); }else{ printf("匹配錯誤\n"); printf("\n"); printf("------------------------end------------------------"); } }
主函數spa
#include"StringMatch.h" int main() { SqStack S; Initstack(S); Match(S); }