首页 > 其他 > 详细

括号匹配

时间:2019-09-19 11:18:51      阅读:169      评论:0      收藏:0      [点我收藏+]
题目描述

苗苗今天刚刚学会使用小括号,不过他分不清小中大括号和尖括号,不知道怎么使用其他括号,他认为(>以及{]是正确的(其实是错误的),你能帮助他判断括号是否使用正确(匹配)吗?

解答要求时间限制:1000ms, 内存限制:64MB
输入

输入文件包含六组测试数据,每组测试数据是一行只包含’(‘,’)’,’{‘,’}’,’[‘,’]’,’<’,’>’的字符串(长度不超过10000)。

输出

对于每组测试数据,如果使用正确输出yes,否则输出no。每个占一行。

输入样例

[>
([]{<>})
({[<>]})
()
()
()

输出样例 1

no
yes
yes
yes
yes
yes

提示

栈的应用:
依次读入字符,如果是左括号,将它放进栈,如果是右括号,而且栈顶元素是相对应的左括号,就把栈顶元素弹出,最后如果栈空就跳出循环,结果为no,因为这样说明栈中没有左括号;字符全都读入,如果栈空的话,就是yes,否则就是no。

//
// Created by l50007414 on 2019/9/18.
//

#include <stdio.h>
#include <string.h>

void caculate1(char *data);

typedef struct stack {
    char data[10000];
    int top;
} stack;

int main() {
    for (int i = 0; i < 6; ++i) {
        char data[10000];
        gets(data);
        caculate1(data);
    }

    return 0;
}

void caculate1(char *data) {
    stack temp = {{0}, -1};
    int size = strlen(data);
    for (int i = 0; i < size; ++i) {
        //如果是左括号  将其入栈
        if (data[i] == ( || data[i] == { || data[i] == [ || data[i] == <) {
            temp.data[++temp.top] = data[i];
        } else {
            //如果不是  就将其与栈顶元素比较  不等则出错  相等就出栈
            if ((data[i] == ) && temp.data[temp.top] == () || (data[i] == } && temp.data[temp.top] == {) ||
                (data[i] == ] && temp.data[temp.top] == [)
                || (data[i] == > && temp.data[temp.top] == <)) {
                temp.top--;
            } else {
                printf("no\n");
                return;;
            }
        }
    }
    if (temp.top == -1) {
        printf("yes\n");
    } else {
        printf("no\n");
    }
}

 

括号匹配

原文:https://www.cnblogs.com/ustc-anmin/p/11547769.html

(1)
(1)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!