1. 程式人生 > >UVA——673 Parentheses Balance

UVA——673 Parentheses Balance

題目:

         Parentheses Balance
 

Problem Description

You are given a string consisting of parentheses () and []. A string of this type is said to becorrect:

(a)

if it is the empty string

(b)

if A and B are correct, AB is correct,

(c)

if A is correct, (A) and [A] is correct.

Write a program that takes a sequence of strings of this type and check their correctness. Your program can assume that the maximum string length is 128.

Input

the file contains a positive integer n and a sequence of n strings of parentheses() and [], one string a line.

Output

A sequence of Yes or No on the output file.

Sample Input

3
([])
(([()])))
([()[]()])() 

Sample output

Yes
No
Yes

題目描述:

         括號匹配問題,用棧來寫的,比較坑的是,當讀入空行時要判為Yes。當時我用的scanf,然後就用%c讀的,再手動把換行符換成\0。

解題程式碼:

#include<stdio.h>  #include<string.h> int f[110][110]; char e[150]; int a,b,c,i,j; typedef struct q { char e[150]; int top; }q; int main() { q w; int t; while(scanf("%d",&a)!=EOF){ getchar(); while(a -- ){ memset(e,'\0',sizeof(e)); i=0; while(1){ scanf("%c",&e[i]); if(e[i] == '\n'){ e[i] = '\0'; break; } i ++; } memset(w.e,'\0',sizeof(w.e)); w.top = 0; t = 0; if(strlen(e) == 0){ printf("Yes\n"); continue; } for(i = 0;i < strlen(e);i ++){ if(e[i] == '(' || e[i] == '['){ w.e[w.top++] = e[i]; } else{ if(w.top && (w.e[w.top-1] == '[' && e[i] == ']' || w.e[w.top-1] == '(' && e[i] == ')')){ w.top --; } else{ t = 1; break; } } } if(t || w.top) printf("No\n"); else printf("Yes\n"); } } return 0; }