1. 题目
2. 代码
最近热衷于写bug(???到底谁会热衷于这个),感受到了调试的乐趣(你怕不是在做梦orz,头都大了)
看起来好像一目了然(还不错的样子)
//[5+(6-3)]-(2+3)
#include <iostream>
#include <stack>
#include <string>
using namespace std;
bool match(char left, char right){
if((left == '(' && right == ')' ) || (left == '[' && right == ']') || (left == '{' && right == '}' )){//这里不能用双引号!!!
return true;
}
return false;
}
int main(int argc, char** argv) {
int flag = 0;
stack<char> s; //直接用栈它不香吗(或许难道是让我自己实现栈操作?)
string str;
getline(cin, str); //之前试过用getchar()直接来取字符,但是就算处理了最后的换行系统还是TE,所以还是字符串yyds
for(int i=0; i<str.length(); i++){
char tmp = str[i];
// cout << "tmp :" << tmp << endl;
switch(tmp){ //题目只用判断括号嘛,其他所有符号就default咯
case '(':
case '[':
case '{':
s.push(tmp); //左括号进栈
// cout << "push: " << tmp << endl << endl;
break;
case ')':
case ']':
case '}':
{
if(s.empty()){
cout << "no" << endl;
flag = 1;
break;
}
else{
char t = s.top();
if(!match(t, tmp)){
cout << "no" << endl;
flag = 1; //右括号不匹配就直接结束啦
break;
}
else{
s.pop(); //右括号匹配就出栈
// cout << "pop: " << t << endl << endl;
break;
}
}
}
default: ;
}
if(flag == 1){
break;
}
}
if(flag != 1){
if(!s.empty()){ //还有左括号没被匹配上
cout << "no" << endl;
}
else{
cout << "yes" << endl;
}
}
return 0;
}