You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言递归检查等式括号平衡问题求助

C语言递归实现括号平衡检查(忽略非括号字符)

嘿,我来帮你搞定这个问题——用递归方式检查括号平衡,同时完美忽略等式里的其他字符和空格对吧?先说说核心思路:递归其实可以模拟栈的“入栈出栈”逻辑,我们只需要跟踪当前左括号比右括号多的数量,遇到非括号字符直接跳过就行,不用管它们。

完整实现代码

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

// 递归检查括号平衡的函数
bool checkBalance(char *str, int *index, int balance) {
    // 终止条件:遍历完所有字符,此时平衡数必须为0才是合法的
    if (str[*index] == '\0') {
        return balance == 0;
    }

    // 处理当前字符
    switch(str[*index]) {
        case '(':
            // 遇到左括号,平衡数+1,继续处理下一个字符
            (*index)++;
            return checkBalance(str, index, balance + 1);
        case ')':
            // 遇到右括号,先判断是否有对应的左括号(平衡数不能为0)
            if (balance == 0) {
                return false;
            }
            // 平衡数-1,继续处理下一个字符
            (*index)++;
            return checkBalance(str, index, balance - 1);
        default:
            // 非括号字符(包括空格),直接跳过,处理下一个
            (*index)++;
            return checkBalance(str, index, balance);
    }
}

int main() {
    char input[100];
    printf("请输入带括号的表达式:");
    fgets(input, sizeof(input), stdin);
    // 去掉fgets读取的换行符
    input[strcspn(input, "\n")] = '\0';

    int index = 0;
    if (checkBalance(input, &index, 0)) {
        printf("括号是平衡的!\n");
    } else {
        printf("括号不平衡!\n");
    }

    return 0;
}

关键部分解释

  • 递归函数参数:index用指针是因为递归过程中需要共享当前遍历的位置,不然每次递归都会从开头重新处理;balance记录当前左括号比右括号多的数量,用来判断是否匹配。
  • 非括号字符处理:遇到除了(和)之外的所有字符(包括空格、字母、数字、运算符),直接跳过,递归处理下一个字符就行,完全不影响平衡判断。
  • 终止条件:当遍历到字符串末尾时,只有balance等于0(所有左括号都有对应的右括号)才返回true,否则就是不平衡。

测试案例

  • 输入((a + b) * (c - d)) → 输出“括号是平衡的!”
  • 输入(() → 输出“括号不平衡!”
  • 输入)a + b( → 输出“括号不平衡!”
  • 输入a + b * c → 输出“括号是平衡的!”(没有括号也算平衡)

内容的提问来源于stack exchange,提问作者Arkarian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:44:47