posts - 0,comments - 0,trackbacks - 0
    编写算法,判断一个表达式中的括号是否正确匹配。
    给一个表达式,用目测的方法怎么做呢。从左往右看这个表达式中的括号,看到一个“(”,就记住它(这里理解为入栈),如果下一个括号是“)”,则划掉这两个括号(这里可以理解为出栈),表示一对括号处理完毕,继续往后看。如果前面所有的括号都被划掉了,二下一个括号却是“)”,则括号一定不匹配,因为“)”之前已经没有括号和它匹配了。如果下一个括号是“(”,则暂时不管,先把它放在那里,等后边的“(”处以后看到的哭哦哈哦啊要么是“(”要么是“)”,就用前边说的方法来处理。如果到最后所有的括号都被划掉则匹配,否则就不匹配。由此可以看到,一个问题中如果出现这种情况,即在解决问题的过程中出现一个状态,但凭现在的条件不能判断当前的状况是否可以解决,需要记下,等待以后出现可以解决当前状态的条件后返回再解决之。这种问题需要用栈来解决,栈具有记忆功能,这就是栈的FILOO特性延伸出来的一种特性。

#include<iostream>
#define maxSize 50
using namespace std;
int match(char a[],int n)
{
    char stack[maxSize];
    int top=-1;
    for(int i=0;i<n;i++)
        if(a[i]=='(')
            stack[++top]='(';
        else if(a[i]==')')
        {
            if(top==-1)
                return 0;
            top--;
        }
    if(top==-1)
        return 1;
    else return 0;
}
int main()
{
    char a[maxSize];
    cout<<"请输入算术表达式,以#结束: ";
    int i=0;
    while(cin>>a[i],a[i]!='#')
    {
        i++;
    }
    for(int j=0;j<i;j++)
        cout<<a[j];
    cout<<endl;
    if(match(a,i)==1)
        cout<<"匹配成功";
    else
        cout<<"不能匹配";
    return 1;
    
}
posted on 2012-08-22 08:52 yyj 阅读(200) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航:   博客园   博客园最新博文   博问   管理