功能:主要對字符串中的括號(包括“{}”、“[]”、“()”)進行匹配;匹配成功時,打印匹配成功,否則打印匹配失敗。
算法思路: 從字符串的第一個字符開始掃描,若是普通字符則忽略,反之若是左符號則入棧操作;當遇見右符號的時候則從棧中彈出棧頂元素,并進行匹配;
匹配結束時: 成功:所有字符掃描完畢,并且棧為空; 失敗:匹配失敗或所有字符掃描完畢但是棧非空;
附:調試過程中,有些小問題,有時間了再修改;
.h文件#PRagma once#include<stdio.h>#include <stdlib.h>#include <string.h>#define true 1#define false 0#define SIZE 100typedef char ElemType;typedef struct stack { ElemType *base; int top; int stacksize; }Stack;//1.建立一個空棧void Init(Stack *s);//2.入棧int Push(Stack *s,ElemType d);//3.彈棧int Pop(Stack *s,ElemType *mPtr);//4.獲取棧頂元素int GetTop(Stack *s,ElemType *e);//5.判斷棧非空int Empty(Stack *s);//6.打印棧元素void List(Stack *s);//7.匹配括號int MyFunc(char *mString);.c文件#include "Stack.h"http://1.建立一個空棧void Init(Stack *s) { s->base=(ElemType *)malloc (sizeof(ElemType)*SIZE); s->top=0; s->stacksize=SIZE; return ; }//2.入棧int Push(Stack *s,ElemType d) { //棧滿 if (s->top>=s->stacksize) { s->base=(ElemType *)realloc (s->base,sizeof(s->stacksize+1)*sizeof(ElemType)); //判斷棧內存空間是否分配成功 if (s->base==NULL) return false; s->stacksize++; } s->base[s->top++]=d; return true; }//3.彈棧int Pop(Stack *s,ElemType *mPtr) { if (s->top==0) return false; else { *mPtr=s->base[s->top--]; return true; } }//4.獲取棧頂元素int GetTop(Stack *s,ElemType *e) { if (s->top==0) return false; *e=s->base[--s->top]; return true; }//5.判斷棧非空int Empty(Stack *s) { if (s->top==0) return true; return false; }//6.打印棧元素void List(Stack *s) { if (s->top==0) return; while (s->top-1>=0) { printf ("data:%c/n",s->base[s->top-1]); s->top--; } }//7.匹配括號int MyFunc(char *mString) //mString->[26*(12+8)/(45-29)] { int i=0,flag=1; Stack s1; ElemType e; Init(&s1); while (mString[i]!='/0') { switch (mString[i]) { case '(':Push (&s1,'(');break; case '[':Push (&s1,'[');break; case '{':Push (&s1,'{');break; case ')':GetTop (&s1,&e); if (e=='(') Pop (&s1,&e); else flag=0; break; case ']':GetTop (&s1,&e); if (e=='[') Pop (&s1,&e); else flag=0; break; case '}':GetTop (&s1,&e); if (e=='{') Pop (&s1,&e); else flag=0; break; } ++i; } if (Empty (&s1)&&flag) return true; else return false; }test.c#include "Stack.h"int main(void) { char str[]="[20*(16+4)/(15-6)]"; if (MyFunc (str)) printf ("匹配成功!/n"); else printf ("匹配失敗!/n"); system ("pause"); return 0; }新聞熱點
疑難解答