使用棧判斷括號匹配
阿新 • • 發佈:2019-02-15
判讀括號是否匹配的方法比較簡單,假如給定一系列的括號,判斷是否全部都匹配我們肯定是將能匹配的括號全部刪除,如果最後沒有剩下任何括號那麼肯定就是匹配了;如有剩下的左括號或者右括號說明不匹配。
詳見程式碼描述:
#include <iostream> #include <stack> using namespace std; int main(int argc, char const *argv[]) { string leftparenthese = "([{<";//儲存左括號列表 string rightparenthese = ")]}>";//儲存右括號列表 stack<char> parenthese; string str; cin >> str; int flag = -1; for (int i = 0; i < str.length(); i++) { if (leftparenthese.find(str[i]) != string::npos)//左括號直接入棧 parenthese.push(str[i]); else if (rightparenthese.find(str[i]) != string::npos)//如果遇到右括號 { //檢查是否與棧頂棧頂符號匹配 if (!parenthese.empty() && leftparenthese.find(parenthese.top()) == rightparenthese.find(str[i])) parenthese.pop();//如果匹配則刪除棧頂符號 else//不匹配則標記並退出循序 { flag = i; break; } } } //根據比較結果判定是否匹配 if (!parenthese.empty() || flag >= 0) cout << "unmatch" << endl; else cout << "perfect matched" << endl; return 0; }