第五周项目3 括号的匹配

/*  
*Copyright (c) 2017,烟台大学计算机与控制工程学院  
*All rights reserved.  
*文件名称:第五周项目3  括号的匹配 
*作    者:葛惠文 
*完成日期:2017年10月7日  
*版 本 号:v1.0  
*问题描述:假设表达式中允许三种括号:圆括号、方括号和大括号。
           编写一个算法,判断表达式中的各种左括号是否与右括
           号匹配。例如,输入2+(3+4)*[2+{[3]}]-8,输出匹配
           正确;输入2+(3+4*[2)+{[3]}-8,输出匹配错误。
           提示:(1)遇到左括号入栈,遇到右括号后,出栈一个
           符号,看是否配对。若配对,继续,直到读完所有的符
           号,栈也正好为空。若在中间出现一个不配对的,或者
           __________,则可以得出不配对的结论。
          (2)也可以设计一个返回值为布尔型的函数,参数为要
           配对的表达式,为一个字符串。
*/  


程序如下(其中用到顺序栈算法库)

#include 
#include "sqstack.h"
int main()
{
    char c;
    char st[50];
    int d=1, i;
    SqStack *s;
    InitStack(s);
    printf("请输入表达式:");
    scanf("%s", st);
    for(i=0; st[i]!='\0'&&d; i++)
    {
        switch(st[i])
        {
        case'(':
        case'[':
        case'{':
            Push(s, st[i]);
            break;
        case')':
            Pop(s, c);
            if(c!='(') d=0;
            break;
        case']':
            Pop(s, c);
            if(c!='[') d=0;
            break;
        case'}':
            Pop(s,c);
            if(c!='{') d=0;
            break;
        }
    }
    if(StackEmpty(s)&&d==1)
        printf("配对正确!!\n");
    else
        printf("配对错误!!\n");
    return 0;
}


你可能感兴趣的:(第五周项目3 括号的匹配)