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

C 語言大括號配對驗證:堆疊演算法正確實作與常見邏輯錯誤分析

     編輯:關於C語言

C 語言大括號配對驗證:堆疊演算法正確實作與常見邏輯錯誤分析

原始碼錯誤分析

// 原始錯誤邏輯
int j = 0;
for (i=0; s[i]; i++) {
    if (s[i]=='}') { if (j==0) fail; else j++; }
    else j--; // 錯誤:遇到 '{' 應 j++,遇到 '}' 應 j-- 且檢查負值
}
if (j==0) success; // 錯誤:j 計數邏輯顛倒

正確堆疊/計數器演算法

#include <stdio.h>
#include <string.h>

int check_braces(const char *str) {
    int depth = 0;
    for (int i = 0; str[i]; ++i) {
        if (str[i] == '{') depth++;
        else if (str[i] == '}') {
            if (depth == 0) return 0; // 多餘右括號
            depth--;
        }
    }
    return depth == 0; // 0 表配對成功
}

int main() {
    char code[1000];
    printf("輸入程式碼片段: ");
    fgets(code, sizeof(code), stdin);
    if (check_braces(code)) puts("大括號配對正確");
    else puts("大括號配對錯誤");
    return 0;
}

擴展:多種括號通用驗證 (堆疊)

int check_all_brackets(const char *str) {
    char stack[1000];
    int top = -1;
    for (int i = 0; str[i]; ++i) {
        char c = str[i];
        if (c=='('||c=='['||c=='{') stack[++top] = c;
        else if (c==')'||c==']'||c=='}') {
            if (top < 0) return 0;
            char open = stack[top--];
            if ((c==')'&&open!='(') || (c==']'&&open!='[') || (c=='}'&&open!='{'))
                return 0;
        }
    }
    return top == -1;
}

應用場景

  • 編譯器/解析器語法分析階段。
  • 程式碼編輯器即時錯誤提示。
  • JSON/XML 格式驗證。

掌握堆疊配對括號是資料結構與編譯原理的入門必修課。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved