QA1

简介: 该程序使用栈检测算术表达式中括号是否匹配。支持圆括号、方括号和花括号,检查配对与嵌套顺序,输入以#结束,输出匹配结果或错误信息。
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#define size 30

// 全局栈(避免使用指针)
char stack_data[size], ch;
char ch;
int stack_top = 0; // 栈顶索引,-1 表示空栈

// 初始化栈
void initStack()
{
   
    stack_top = 0;
}

// 入栈
bool push(char ch)
{
   
    if (stack_top >= size - 1)
    {
   
        return false; // 栈满
    }

    stack_data[stack_top] = ch;
    stack_top++;
    return true;
}

// 出栈
char pop()
{
   
    if (stack_top <= 0)
    {
   
        return '\0'; // 空栈返回空字符
    }
    stack_top--;
    char top_char = stack_data[stack_top];
    return top_char;
}

void check(char x, char y)
{
   
    if (x == '\0' || x == '#')
    {
   
        printf("错误:右括号多!");
        exit(0);
    }
    else
    {
   
        if (x != y)
        {
   
            printf("错误:括号不匹配!");
            exit(0);
        }
    }
}

// 主函数:读取表达式并检查括号
int main()
{
   
    char ch, out;
    initStack(); // 初始化全局栈
    push('#');

    printf("请输入算术表达式(以 # 结束):\n");

    // 读取输入直到 '#'
    ch = getchar();

    while (ch != '#')
    {
   
        switch (ch)
        {
   
        case '(':
        case '[':
        case '{':
            push(ch);
            break;
        case ')':
            out = pop();
            check(out, '(');
            break;
        case ']':
            out = pop();
            check(out, '[');
            break;
        case '}':
            out = pop();
            check(out, '{');
            break;

        default:
            break;
        }

        ch = getchar();
    }
    out = pop();
    if (out == '#')
    {
   
        printf("括号配对正确且不交叉。\n");
    } else {
   
        printf("错误:左括号多\n");
    }

    return 0;
}
相关文章
|
11月前
|
存储 SQL 消息中间件
从 ClickHouse 到 StarRocks 存算分离: 携程 UBT 架构升级实践
查询性能实现从秒级到毫秒级的跨越式提升
|
机器学习/深度学习 自然语言处理 算法
在Python中进行自然语言处理(NLP)的文本预处理
在Python中进行自然语言处理(NLP)的文本预处理
638 1
|
11月前
|
存储 自然语言处理 测试技术
开源嵌入模型对比:让你的RAG检索又快又准
嵌入是RAG系统的核心,将文本转化为语义向量,实现基于含义的检索。本文详解嵌入原理、关键参数及主流开源模型,助你根据分块大小、语言需求和性能约束,选择最合适的嵌入方案,提升RAG效果。
2390 5
开源嵌入模型对比:让你的RAG检索又快又准
|
11月前
QA3
该程序使用双栈(数字栈和运算符栈)实现算术表达式求值,支持加减乘除、乘方及括号运算。通过优先级控制运算顺序,最终输出计算结果。
324 67
|
11月前
QA2
本示例演示循环队列的FIFO操作,通过front、rear和count指针变化展示入队、出队过程,直观呈现队列状态与数据流动,帮助理解队列的工作原理及边界处理。
478 2
|
11月前
|
编解码 算法 定位技术
巴西朗多尼亚州 Landsat TM 系列中的 LBA-ECO ND-01 流域森林砍伐:1999 年
本数据集基于1975–1999年Landsat TM影像,估算巴西朗多尼亚州流域森林砍伐比例。结合SRTM数字高程模型划分七级Strahler流域,叠加森林砍伐图,分析1999年累计砍伐情况,揭示农业扩张对热带雨林的影响。
198 4
|
前端开发 JavaScript UED
React 图标库使用指南
本文详细介绍如何在 React 项目中使用 `react-icons` 等图标库,涵盖环境搭建、基础使用、常见问题与易错点、高级用法等内容,并通过代码案例进行说明。适合初学者和进阶开发者参考。
1429 8
|
12月前
|
存储 C语言
`scanf`是C语言中用于按格式读取标准输入的函数
`scanf`是C语言中用于按格式读取标准输入的函数,通过格式字符串解析输入并存入指定变量。需注意输入格式严格匹配,并建议检查返回值以确保读取成功,提升程序健壮性。
1627 0
|
存储 C语言 C++
& 符号的含义和用法
在C语言中,`&`符号常用于取地址,如`scanf`中传递变量地址以存储输入数据。示例中`&a`和`&x`获取变量内存地址,确保数据正确读入。省略会导致未定义行为。此外,`&`还用于指针声明、按位与运算等,是C/C++中的关键操作符之一。
2594 0
|
存储 消息中间件 NoSQL
【亲测有用】数据中台数据模型管理能力演示
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。