C 中用棧來判斷括號字串匹配問題

2022-02-11 11:43:47 字數 1802 閱讀 8586

輸入乙個括號字串,依次檢驗,若為左括號則則入棧,若為右括號則出棧乙個字元判斷是否與之相對應,在最後還需判斷棧是否為空,如果不為空則不匹配。

首先回顧棧的基本知識:

定義棧的結構體並初始化乙個新棧:

struct

stack

;void initstack(stack &s)

出棧和入棧操作:

char push(stack &s,char

a) s.top++;

s.strstack[s.top]=a;

returna;}

char pop(stack &s)

char a=s.strstack[s.top];

s.top--;

return

a;}

判斷棧是否為空:

int empty(stack &s,int

re)

else

}

以上是棧的基本操作,定義乙個棧和初始化乙個新棧,出棧和入棧操作,以及判斷棧是否為空的情況。接下來將寫乙個函式,檢查字串的每個字元,左括號則進行入棧操作,右括號則進行出棧操作看其是否匹配,最後判斷是否為空以判定是否匹配。**如下:

int check(char *str)

break

;

case']

':if(pop(s)!='['

)

break

;

case'}

':if(pop(s)!='

break

; }

}int re=0

; re=empty(s,re);

if(re==1

)

else

}

自此,括號字串匹配的判斷問題已經解決,下面貼出完整的經過編譯執行過的**。

view code

#include #include 

#include

using

namespace

std;

#define stacksize 100

struct

stack

;void initstack(stack &s)

char push(stack &s,char

a) s.top++;

s.strstack[s.top]=a;

returna;}

char pop(stack &s)

char a=s.strstack[s.top];

s.top--;

returna;}

int empty(stack &s,int

re)

else

}int check(char *str)

break

;

case']

':if(pop(s)!='['

)

break

;

case'}

':if(pop(s)!='

break

; }

}int re=0

; re=empty(s,re);

if(re==1

)

else

}void

main()

else

if(re==0

)

}

利用棧判斷字串括號是否匹配

任務描述 本關任務 基於棧stack資料結構判斷字串中的括號是否匹配,字串中僅包含如下字元 相關知識 為了完成本關任務,你需要掌握 1.如何建立乙個棧,2.入棧 出棧操作。演算法思想 輸入符號串str 初始化棧s for i 0 str i 0 i 掃瞄括號串 若棧不空,則匹配不成功,否則匹配成功 ...

python棧 字串反轉,括號匹配

棧的實現 1 定義乙個棧類 2class stack 3 棧的初始化 4def init self 5 self.items 6 判斷棧是否為空,為空返回true 7def isempty self 8return self.items 9 向棧內壓入乙個元素 10def push self,ite...

字串括號匹配檢查

include stdafx.h struct charstack char c struct node pnext struct node ptop charstack void push char c else char pop bool ismatch char str break case ...