本文實例主要實現:輸入一個括號字符串,依次檢驗,若為左括號則入棧,若為右括號則出棧一個字符判斷是否與之相對應,在最后還需判斷棧是否為空,如果不為空則不匹配。
首先回顧棧的基本知識:
1.定義棧的結構體并初始化一個新棧:
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; }}以上是棧的基本操作,定義一個棧和初始化一個新棧,出棧和入棧操作,以及判斷棧是否為空的情況。接下來將寫一個函數,檢查字符串的每個字符,左括號則進行入棧操作,右括號則進行出棧操作看其是否匹配,最后判斷是否為空以判定是否匹配。
主要功能代碼如下:
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; }}自此,括號字符串匹配的判斷問題已經解決,下面貼出完整的經過編譯運行過的代碼。
完整實例代碼如下:
#include <iostream>#include <stdio.h>#include <string.h>using namespace std;#define stacksize 100struct 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++算法設計的學習有所幫助。
新聞熱點
疑難解答
圖片精選