首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C 語言棧實現:驗證源代碼花括號匹配

     編輯:關於C

問題

從標準輸入讀取 C 源代碼,判斷所有花括號 {} 是否正確成對、巢狀匹配。

棧算法邏輯

  1. 讀入字符,遇到 { 入棧;
  2. 遇到 }:若棧空 → 匹配失敗;否則出棧;
  3. 輸入結束:棧空 → 匹配成功;否失敗。

代碼實現(修正版)

#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; }
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved