 
										
					
	
倚天照海花无数,流水高山心自知。
写了第一个.看看有什么BUG没.
大家继续讨论 .
.
非常感谢大家的支持.
#include<stdio.h>
int main()
{
    char str[100];
    int a[100];
    int top,i,j,min,flag;
    while(EOF!=(scanf("%s",str)))
    {
        top=0;
        min=5;//设定当前优先级
        for(i=0;str[i]!='\0';i++)
        {
            flag=1;//左括号
            switch(str[i])
            {
                case '{': a[top]=4;break;
                case '[': a[top]=3;break;
                case '(': a[top]= 2;break;
                case '<': a[top]=1;break;
                default :flag=0;break;  //右括号
            }
            if(flag==1)
            {
                if(a[top]>min)
                {
                    printf("false\n");
                    return 1;
                }
                else
                {
                    min=a[top];
                    top++;
                }
            }
            else
            {
                switch(str[i])
                {
                    case '}': a[top]=-4;break;
                    case ']': a[top]=-3;break;
                    case ')': a[top]= -2;break;
                    case '>': a[top]=-1;break;
                    default :printf("false\n"); return 1;
                }
                if(top<1||a[top-1]*-1!=a[top])
                {
                    printf("false\n");
                    return 1;
                }
                else
                {
                    if(top>2)
                    {
                         top--;
                         min=a[top-1];
                    }
                    else
                    {
                        top=0;
                        min=5;
                    }
                }
            }
        }
        printf("ture\n");
    }
    return 1;
}
请不要误会.
[此贴子已经被作者于2007-3-19 23:36:46编辑过]

#include<stdio.h>
int main()
{
    char str[100];
    int a[100];
    int top,i,j,min,flag;
    while(EOF!=(scanf("%s",str)))
    {
        top=0;
        min=5;//设定当前优先级
        for(i=0;str[i]!='\0';i++)
        {
            flag=1;//左括号
            switch(str[i])
            {
                case '{': a[top]=4;break;
                case '[': a[top]=3;break;
                case '(': a[top]= 2;break;
                case '<': a[top]=1;break;
                default :flag=0;break;  //右括号
            }
            if(flag==1)
            {
                if(a[top]>min)
                {
                    printf("false\n");
                    return 1;
                }
                else
                {
                    min=a[top];
                    top++;
                }
            }
            else
            {
                switch(str[i])
                {
                    case '}': a[top]=-4;break;
                    case ']': a[top]=-3;break;
                    case ')': a[top]= -2;break;
                    case '>': a[top]=-1;break;
                    default :printf("false\n"); return 1;
                }
                if(top<1||-1*a[top-1]!=a[top])
                {
                    printf("false\n");
                    return 1;
                }
                else
                {
                    if(top>1)
                    {
                         top--;
                         min=a[top-1];
                    }
                    else
                    {
                        top=0;
                        min=5;
                    }
                }
            }
        }
        if(top==0)
        {
            printf("ture\n");
        }
        else
        {
            printf("false\n");
        }
    }
    return 1;
}
谢谢iwfy.
