1. 程式人生 > >使用棧判斷括號匹配

使用棧判斷括號匹配

       判讀括號是否匹配的方法比較簡單,假如給定一系列的括號,判斷是否全部都匹配我們肯定是將能匹配的括號全部刪除,如果最後沒有剩下任何括號那麼肯定就是匹配了;如有剩下的左括號或者右括號說明不匹配。

       詳見程式碼描述:

#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;
}