假設表示式中允許括號巢狀,則檢驗括號是否匹配的方法可用「期待的急迫程度」這個概念來描述。
我們下面給和例子進行說明:
可能出現的不匹配的情況:
① 盼來的右括號不是所「期待」的;
② 到來的是「不速之客」 (右括號多);
③ 到結束也未盼來所「期待」的括號 (左括號多)。
1)凡出現左括號,則進棧;
2)凡出現右括號,首先檢查棧是否空。
若棧空,則表明該「右括號」多餘;
否則和棧頂元素比較,
若相匹配,則「左括號出棧」,
否則表明不匹配。
3)表示式檢驗結束時,
若棧空,則表明表示式中匹配正確,
否則表明「左括號」有多餘的。
#include
#include
#include
bool
isvalid
(const
char
* s)
;int
main()
";if(
isvalid
(tmp)
)printf
("ok\n");
else
printf
("no\n");
return0;
}bool
isvalid
(const
char
* s)
else')
if(s[i]
==']')if
(s[i]
==')')}
}if(pos <0)
return
true
;return
false
;}
執行結果 括號匹配的檢驗(棧)
include using namespace std include include define ture 1 define false 0 define ok 1 define error 0 define overflow 2 typedef int status typedef char ...
順序棧實現括號匹配
採用順序棧程式設計實現 表示式的括號是否匹配問題。要求 輸入帶括號的表示式,判斷其中括號是否配對。擴充套件功能 給出配對括號的位序和不配對括號的位序。include include include include include define overflow 2 define stack init...
c語言棧實現括號匹配
在文字處理軟體或編譯程式設計時,常常需要檢查乙個字串或乙個表示式中的括號是否 相匹配?匹配思想 從左至右掃瞄乙個字串 或表示式 則每個右括號將與最近遇到的那個左括 號相匹配。則可以在從左至右掃瞄過程中把所遇到的左括號存放到堆疊中。每當遇到乙個 右括號時,就將它與棧頂的左括號 如果存在 相匹配,同時從...