括號匹配


題目描述

苗苗今天剛剛學會使用小括號,不過他分不清小中大括號和尖括號,不知道怎么使用其他括號,他認為(>以及{]是正確的(其實是錯誤的),你能幫助他判斷括號是否使用正確(匹配)嗎?

解答要求時間限制: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");
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM