我們在編寫程式的時候經常會遇到括號不匹配而導致語法錯誤的問題,現在我們可以通過棧來自己實現括號匹配的問題,了解其實現細節。
我們假設在表示式中只有()這兩種括號,其巢狀的方式是隨意的。檢驗括號是否匹配可以用「期待的急迫程度」這個概念來描述(其實就是優先順序的意思)。
使用棧的方式進行匹配可以很好的執行這個解決過程:
1,遍歷字串,如果遇到'(' 或者是'['則進行入棧操作,過濾掉其他字元
2,如果遇到')'或是『]』,則與棧頂元素進行判斷,看是否匹配'('與『)』匹配,
『[』與']'匹配。如果匹配成功,則出棧(注意這裡並沒有將『)』或']'壓入棧中。
如果匹配失敗,則可直接返回錯誤資訊。
3,當迴圈遍歷結束時檢視棧頂指標top是否為0(兩兩匹配的話就會最終結果就為0了),否則返回錯誤資訊。
以下是具體的**實現:
#define true 1
#define false 0
typedef int status;
/**-- 字元匹配,str為需要判斷是否匹配成功的字串 --*/
status bracketmatch(char* str) else if (str[i] == ')' || str[i] == ']' ) else if (stack[top - 1] == str[i] - 2) else
return false; //失敗即可立即返回
} i++;
} //最後判斷top是否為0
return top == 0 ? true : false; }
int main() else
return 0;
}
以下是測試結果: 括號匹配(c語言實現)
我的 www.mengyingjie.com 編寫程式檢查該字串的括號是否成對出現,而且不能交叉出現。輸入 乙個字串,裡邊可能包含 三種括號,結束 輸出 成功 代表括號成對出現並且巢狀正確 失敗 未正確使用括號字元。include include define stack int size 100 ...
順序棧實現括號匹配的檢驗(C語言實現) 棧
假設表示式中允許括號巢狀,則檢驗括號是否匹配的方法可用 期待的急迫程度 這個概念來描述。我們下面給和例子進行說明 可能出現的不匹配的情況 盼來的右括號不是所 期待 的 到來的是 不速之客 右括號多 到結束也未盼來所 期待 的括號 左括號多 1 凡出現左括號,則進棧 2 凡出現右括號,首先檢查棧是否空...
c語言棧實現括號匹配
在文字處理軟體或編譯程式設計時,常常需要檢查乙個字串或乙個表示式中的括號是否 相匹配?匹配思想 從左至右掃瞄乙個字串 或表示式 則每個右括號將與最近遇到的那個左括 號相匹配。則可以在從左至右掃瞄過程中把所遇到的左括號存放到堆疊中。每當遇到乙個 右括號時,就將它與棧頂的左括號 如果存在 相匹配,同時從...