1 solutions

  • 1
    @ 2024-11-30 16:00:49

    很俗的stack训练题

    难点在于左括号的如何判断多余以及多个输入

    #include<bits/stdc++.h>
    using namespace std;
    string a;
    int main(){
    	while(1){
    		getline(cin,a);//取整行 
    		if(a=="") break;//没有就结束程序 
    		string ans="";
    		for(int i=0;i<a.size();i++) ans+='$';
    		//开头直接赋 $ 不用判断多余左括号 
    		stack<char> s;//记录括号 
    		stack<int> sn;//记录左括号下标 
    		for(int i=0;i<a.size();i++){
    			if(a[i]!='('&&a[i]!=')') ans[i]=' ';
    			//不是括号就跳过 
    			if(a[i]=='('){
    				s.push('(');//左括号入栈 
    				sn.push(i);//下标入栈
    			}
    			if(a[i]==')'){
    			//是右括号就判断是否多余 
    				if(!s.empty()){//这个判断很重要!! 
    					if(s.top()=='('){//有对应的左括号 
    						ans[sn.top()]=' ';
    						ans[i]=' ';
    						//记录为正常 
    						s.pop(),sn.pop();//别忘了 
    					}
    					else ans[i]='?';//没有对应的就多余 
    				}else ans[i]='?';//啥括号没有也是多余 
    			}
    		}
    		cout<<a<<"\n";
    		cout<<ans<<"\n";
    	}
    	return 0;
    }
    
    • 1

    Information

    ID
    689
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    10
    Tags
    # Submissions
    6
    Accepted
    3
    Uploaded By