從標準輸入讀取 C 源代碼,判斷所有花括號 {} 是否正確成對、巢狀匹配。
{ 入棧;}:若棧空 → 匹配失敗;否則出棧;#include <stdio.h>
#include <stdlib.h>
#define MAX 1000
char stack[MAX];
int top = -1;
void push(char c) { if (top < MAX-1) stack[++top] = c; }
char pop() { return (top >= 0) ? stack[top--] : 0; }
int isEmpty() { return top == -1; }
int main() {
int ch;
int ok = 1;
while ((ch = getchar()) != EOF) { // 支持多行輸入
if (ch == '{') push(ch);
else if (ch == '}') {
if (isEmpty()) { ok = 0; break; }
pop();
}
}
if (ok && isEmpty()) printf("匹配成功!\n");
else printf("匹配不成功!\n");
return 0;
}
while((ch=getchar())!='\n') 僅讀一行,無法處理多行源碼;改為 EOF;MAX 保護;// 遇到右括號時檢查棧頂是否為對應左括號
if (ch == ')' || ch == ']' || ch == '}') {
if (isEmpty()) { ok=0; break; }
char left = pop();
if ((ch==')' && left!='(') || (ch==']' && left!='[') || (ch=='}' && left!='{'))
{ ok=0; break; }
}