括号匹配(有点复杂,因为它讲得详细)

#include<iostream>
#include<stack>
using namespace std;
void BracketMatch(char *str)
{
    stack<char> S;
    char ch;
    int i;

    for(i=0;str[i]!='\0';i++)
    {
        switch(str[i])
        {
        case'(':
        case'[':
        case'{':
            S.push(str[i]);
            break;
        case')':
        case']':
        case'}':
            if(S.empty())
            {
                printf("右括号多余\n");
                return;
            }
            else
            {
                ch=S.top();
                if((ch=='('&&str[i]==')')||(ch=='['&&str[i]==']')||(ch=='{'&&str[i]=='}'))
                    S.pop();
                else
                {
                    printf("对应的左右括号不同类\n");
                    return;
                }
            }
        }
    }
    if(S.empty())
        printf("括号匹配\n");
    else    
        printf("左括号多余\n");
}
int main()
{
    char str[134];
    while(scanf("%s",str)!=EOF)
        BracketMatch(str);
    return 0;
}

 

posted @ 2012-08-02 16:34  myth_HG  阅读(336)  评论(0编辑  收藏  举报