cheng_you_know

学而时习之!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
看到《数据结构》书中,有提到这个栈应用,就自己写个C++实现下~~熟悉下
#include <iostream>
using namespace std;
#include <stack>
#include <string.h>
/*
用栈实现,判断(),[]在等式中是否配对正确
几种特殊情况要考虑到,
1.当没有与之配对的栈,则是匹配错误例如:()[]]
2.当退出时候,需要判断栈是否为空,是否都有判断过;例如[()
author : cheng 2013.6.9
*/
bool is_match(char *s)
{
    int i;
    char temp;
    stack<char>m_stack;
    for(i =0; s[i]!=0;i++)
    {
        if(s[i]=='('|| s[i]== '[')
            m_stack.push(s[i]);
        else if(s[i]==')' || s[i] == ']')
        {
            if(m_stack.size()==0) //当没有与之配对的栈,则是匹配错误()[]]
                return false;
            temp = m_stack.top();
            switch(temp)
            {
            case '(': 
                {
                    if(s[i]==')')
                    {
                        m_stack.pop();
                        break;
                    }
                    else
                        return false;
                }
            case '[': 
                {
                    if(s[i] ==']')
                    {
                        m_stack.pop();
                        break;
                    }
                   else 
                       return false;
                }
            }
                
        }
        else //other char to skip it
            continue;
    }
    if(m_stack.size()==0) //check if all symbol match already 例如:[()
        return true;
    else
        return false;
}
int main()
{
    char src[1000];
    while(scanf("%s",src)!=EOF)
    {
        if(is_match(src) == 1)
            cout<<"match OK!"<<endl;
        else
            cout<<"Mis match,Please check it!"<<endl;
    }
    return 0;
}
posted on 2013-06-09 14:37  cheng_you_know  阅读(331)  评论(0编辑  收藏  举报