任務描述
本關任務:基於棧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 **********/ }