题目描述
假设一个算术表达式中包含圆括号、方括号两种类型的括号,试编写一个判断表达式中括号是否匹配的程序,匹配返回Match succeed!,否则返回Match false!。
输入:包含圆括号、方括号两种类型括号的算术表达式
输出:匹配输出Match succeed! 不匹配输出 Match false!
例 输入[1+2* (3+4*(5+6))] 输出Match succeed!
输入[1+2*(3+4*(5+6))] 输出Match succeed!
输出(1+2)*(1+2*[(1+2)+3) 输出Match false!
解题思路
最经典的小学期用栈的题目,福利题哈哈
匹配的时候不需要管中间的东西,直接continue;但是要注意哪些是有用的。
if(c!='(' && c!=')' && c!='[' && c!=']' && c!='\n') continue;
然后还是按部就班的匹配,但是这个题有两种,只需要注意类型和数目都匹配就行,最后的判断条件是栈为空。
贴源代码
#include<iostream>
#include<stack>
using namespace std;
int main(){
stack<char> brackets;
char c;
while(true){
c = cin.get();
if(c!='(' && c!=')' && c!='[' && c!=']' && c!='\n') continue;
else if('\n'==c) break;
else if('['==c || '('==c)
brackets.push(c);
else if(']'==c){
if('['==brackets.top())
brackets.pop();
else break;
}
else if(')'==c) {
if ('(' == brackets.top())
brackets.pop();
else break;
}
}
if(brackets.empty())
cout << "Match succeed!" << endl;
else
cout << "Match false!" << endl;
return 0;
}
——2022.10.13