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

C語言括號匹配驗證:棧思想的標準輸入流處理

     編輯:關於C

問題

從標準輸入讀取字符流,驗證花括號 {} 是否成對正確嵌套。

棧思想簡化實現(計數器法)

僅需一個計數器 depth:遇 { 遞增,遇 } 遞減。若遞減時 depth==0 或最後 depth!=0 則失敗。

實現代碼


#include <stdio.h>

int main(void) {
    int depth = 0, ch;
    printf("請輸入字符流 (Ctrl+Z/EOF 結束): ");
    while ((ch = getchar()) != EOF) {
        if (ch == '{') ++depth;
        else if (ch == '}') {
            if (depth == 0) { puts("匹配失敗:多餘的 }"); return 1; }
            --depth;
        }
    }
    if (depth == 0) puts("匹配成功");
    else printf("匹配失敗:缺少 %d 個 }\n", depth);
    return 0;
}

測試用例

輸入結果
{}{}成功
{}{{}}成功
{}}{失敗(多餘 })
}}{{失敗(多餘 })
{}}失敗(缺少 })
}{}{{失敗(多餘 })

擴展:多種括號通用驗證


bool is_valid_brackets(const char *s) {
    char stack[1000]; int top = 0;
    for (; *s; ++s) {
        if (*s=='('||*s=='['||*s=='{') stack[top++] = *s;
        else if (*s==')'||*s==']'||*s=='}') {
            if (top==0) return false;
            char open = stack[--top];
            if ((open=='('&&*s!=')') || (open=='['&&*s!=']') || (open=='{'&&*s!='}'))
                return false;
        }
    }
    return top == 0;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved