求助
查看原帖
求助
1070752
a13901280570楼主2024/9/29 20:23

我做这个题,只考虑了括号里面只有一个括号,没考虑并排括号,但是括号里面的括号,输出也有问题。求大佬帮忙看看,输入([(][()]]() 输出[()

#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;
}
2024/9/29 20:23
加载中...