C++中用棧來判斷括號字符串匹配問題的實現(xiàn)方法
本文實例主要實現(xiàn):輸入一個括號字符串,依次檢驗,若為左括號則入棧,若為右括號則出棧一個字符判斷是否與之相對應(yīng),在最后還需判斷棧是否為空,如果不為空則不匹配。
首先回顧棧的基本知識:
1.定義棧的結(jié)構(gòu)體并初始化一個新棧:
struct stack { char strstack[stacksize]; int top; }; void InitStack(stack &s) { s.top=-1; }
2.出棧和入棧操作:
char Push(stack &s,char a) { if(s.top==stacksize-1) { return 0; } s.top++; s.strstack[s.top]=a; return a; } char Pop(stack &s) { if(s.top==-1) { return 0; } char a=s.strstack[s.top]; s.top--; return a; }
3.判斷棧是否為空:
int Empty(stack &s,int re) { if(s.top==-1) { return 1; } else { return 0; } }
以上是棧的基本操作,定義一個棧和初始化一個新棧,出棧和入棧操作,以及判斷棧是否為空的情況。接下來將寫一個函數(shù),檢查字符串的每個字符,左括號則進行入棧操作,右括號則進行出棧操作看其是否匹配,最后判斷是否為空以判定是否匹配。
主要功能代碼如下:
int Check(char *str) { stack s; InitStack(s); int strn=strlen(str); for(int i=0;i<strn;i++) { char a=str[i]; switch (a) { case '(': case '[': case '{': Push(s,a); break; case ')': if(Pop(s)!='(') { return 0; } break; case ']': if(Pop(s)!='[') { return 0; } break; case '}': if(Pop(s)!='{') { return 0; } break; } } int re=0; re=Empty(s,re); if(re==1) { return 1; } else { return 0; } }
自此,括號字符串匹配的判斷問題已經(jīng)解決,下面貼出完整的經(jīng)過編譯運行過的代碼。
完整實例代碼如下:
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; #define stacksize 100 struct stack { char strstack[stacksize]; int top; }; void InitStack(stack &s) { s.top=-1; } char Push(stack &s,char a) { if(s.top==stacksize-1) { return 0; } s.top++; s.strstack[s.top]=a; return a; } char Pop(stack &s) { if(s.top==-1) { return 0; } char a=s.strstack[s.top]; s.top--; return a; } int Empty(stack &s,int re) { if(s.top==-1) { return 1; } else { return 0; } } int Check(char *str) { stack s; InitStack(s); int strn=strlen(str); for(int i=0;i<strn;i++) { char a=str[i]; switch (a) { case '(': case '[': case '{': Push(s,a); break; case ')': if(Pop(s)!='(') { return 0; } break; case ']': if(Pop(s)!='[') { return 0; } break; case '}': if(Pop(s)!='{') { return 0; } break; } } int re=0; re=Empty(s,re); if(re==1) { return 1; } else { return 0; } } void main() { char str[100]; cout<<"請輸入一個長度小于100的字符串:"<<endl; cin>>str; int re=Check(str); if(re==1) { cout<<"你輸入的字符串括號完全匹配!"<<endl; } else if(re==0) { cout<<"你輸入的字符串括號不匹配!"<<endl; } }
希望本文所述實例對大家C++算法設(shè)計的學(xué)習(xí)有所幫助。