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


任務描述

本關任務:基於棧stack數據結構判斷字符串中的括號是否匹配,字符串中僅包含如下字符:( ) [ ] { }

相關知識

為了完成本關任務,你需要掌握:1.如何創建一個棧,2.入棧、出棧操作。 算法思想: 輸入符號串str; 初始化棧S for(i=0; str[i]!=′\0′; i++) /掃描括號串/ { 若str[i]是左括號,則進棧; 否則str[i]是右括號 {
如果,棧空,則輸出匹配不成功,結束函數。
否則彈棧,棧頂元素s[top]與str[i]進行匹配; { 若匹配不成功,則輸出匹配不成功,結束函數。 否則繼續; } } } 若棧不空,則匹配不成功,否則匹配成功

編程要求

本關的編程任務是補全右側代碼,實現對輸入的括號串進行匹配判斷, 若匹配成功輸出YES,否則輸出NO

輸入輸出說明

輸入為單個測試數據,輸入長度不超過100的由( ) [ ] { }等符號組成的字符串,判斷該字符串中各種括號是否匹配,若匹配成功輸出YES,否則輸出NO

以下是平台的測試樣例:

樣例一: 測試輸入: {[()]} 預期輸出: YES

樣例二: 測試輸入: [(]) 預期輸出: NO

 

 

//括號匹配
#include <iostream>
#include<stack>
#include<string.h>
using namespace std;
int match(char str[]);
int main() 
{

    int success;
    
    char str[100];
    cin >> str;
    success = match(str);
    if (success == 1)
        cout << "YES" << endl;
    else
        cout << "NO" << endl;       
    return 0;
}

int match(char str[])
{
        // 請在這里補充代碼,完成本關任務
    /********** Begin *********/
    stack<char>mystack;
    for(int i=0;i<strlen(str);i++){
        char c=str[i];
        if(c=='{'||c=='['||c=='('){
            mystack.push(c);
        }else if(mystack.empty()){
            return 0;
        }else if(c==')'){
            if(mystack.top()!='('){
                return 0;
            }else{
                mystack.pop();
            }
        }else if(c==']'){
            if(mystack.top()!='['){
                return 0;
            }else{
                mystack.pop();
            }
        }else if(c=='}'){
            if(mystack.top()!='{'){
                return 0;
            }else{
                mystack.pop();
            }
        }
    }
    if(mystack.empty())return 1;
    return 0;

    /********** End **********/
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM