题目:
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; }