題目:從標準輸入讀取 C 源碼片段,驗證所有花括號 {} 是否正確成對、巢狀匹配。
利用計數器 count 模擬堆疊:
{ → count++(入棧)。} → 若 count==0 說明無對應左括號,直接判定失敗;否則 count--(出棧)。count==0 則匹配成功,否則有多餘左括號。#include <stdio.h>
#include <stdlib.h>
int main() {
int count = 0;
char ch;
printf("請輸入一組花括號(Ctrl+Z 結束):\n");
while ((ch = getchar()) != EOF) {
if (ch == '{') count++;
else if (ch == '}') {
if (count == 0) {
printf("匹配不成功\n");
return 0;
}
count--;
}
}
if (count == 0) printf("匹配成功\n");
else printf("匹配不成功,多餘 '{' %d 個\n", count);
system("pause");
return 0;
}
| 輸入 | 結果 |
|---|---|
{}{} | 匹配成功 |
{}{{}} | 匹配成功 |
{}}{ | 匹配不成功 |
}}{{ | 匹配不成功 |
{}} | 匹配不成功 |
}{}{{ | 匹配不成功 |
若需同時驗證 ()、[]、{},需使用真正的堆疊結構(陣列或鏈表),將左括號入棧,遇右括號時彈出比對類型是否一致。