任务描述
本关任务:基于栈stack
数据结构判断字符串中的括号是否匹配,字符串中仅包含如下字符:(
)
[
]
{
}
。
相关知识
为了完成本关任务,你需要掌握:1.如何创建一个栈,2.入栈、出栈操作。 算法思想: 输入符号串str; 初始化栈S for(i=0; str[i]!=′ ′; 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 **********/ }