括号匹配算法


没有去实现栈,使用c++中stl提供的stack来操作。


 
算法描述
if(遇到左括号)
{ 压栈
}


if(遇到左括号)
{ 弹栈


  栈为空,弹栈失败 not match
}


if(stack.size()==0) matchelse
not match;



#include<iostream>
#include<stack>
using namespace std;


stack<char> s;
int flag=1;
int endpos=0;


void pop_stack(int i){
     cout<<"enter pop i="<<i<<endl;
    if(s.empty()){
                  flag= -1;
                  }
   if(!s.empty())
   {    
         cout<<"pop top"<<s.top()<<endl;
         s.pop();
         
       
   }
  
    
    }   
   
int main(){
    char ch[]="(())(()))";
  //
     int length=strlen(ch);
   
    cout<<"char length is "<<length;
   // char *a=ch;
    int i=0;
    for(int i=0;i<length;i++)
     {  
            cout<<"ch ["<<i<<"]="<<ch[i]<<endl;
            if(ch[i]=='('){
                    s.push(ch[i]);}
            else
            {    pop_stack(i);
               if(flag==-1){
                   endpos=i;
                   break;
                   }
            }
                    
    }
    
    if(flag==1&&s.size()==0){
         cout<<"match";
              
    }else{
         cout<<"not match wrong ="<<endpos; 
    }
  
   system("pause");
   return 0;
    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值