我做这个题,只考虑了括号里面只有一个括号,没考虑并排括号,但是括号里面的括号,输出也有问题。求大佬帮忙看看,输入([(][()]]() 输出[()
#include <iostream>
#include <stack>
#include <string.h>
using namespace std;
int main() {
stack<char> mys;
char ch;
stack<char> fin;
int len = 0;
int i = 0;
while(cin >> ch && ch != EOF) {
if(ch == '(' || ch == '[' ) {
mys.push(ch);//如果是左括号,就先压入栈,无论对错
}
else if(ch == ')' || ch == ']' ) {//右括号,判断和左括号是否匹配
if(!mys.empty()) {//非空,那么进行下面操作
char top = mys.top();//取出输入栈顶字符
if ((ch == ')' && top == '(') || (ch == ']' && top == '[') ) {//如果匹配,就把右括号压入栈
mys.push(ch);
len+=2;
}else {//如果不匹配的话,
if(fin.size() < len){//计算fin长度,如果长就跳过,如果没有最大值长,就重新装fin
//弄空fin
stack<char> emptystack;
swap(fin, emptystack);
stack<char> temp = mys;
while (!temp.empty()) {
fin.push(temp.top());
temp.pop();
}
}
while (!mys.empty()) mys.pop();
len = 0;
}
}else {
while(!mys.empty()) {
mys.pop();
}
len = 0;
}
}
}
while (!fin.empty()) {
cout << fin.top();
fin.pop();
}
return 0;
}