括號匹配的檢驗

頭文件中函數

#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);
}
相關文章
相關標籤/搜索