花火ios 2021-10-03 21:41 采纳率: 100%
浏览 18
已结题

不理解其中如果(]为什么不匹配,代码里哪里是这个意思?


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

#define TRUE 1
#define FALSE 0

#define STACK_SIZE 20
#define STRING_SIZE 64

typedef int Status;

typedef struct Stack
{
    char string[STACK_SIZE];
    int top;
} Stack,*StackPtr;

Status Stack_Init(StackPtr s);
void Stack_Pop(StackPtr s);
void Stack_Push(StackPtr s, char elem);
Status Stack_IsFull(StackPtr s);
Status Stack_IsEmpty(StackPtr s);

int main()
{
    StackPtr stack;//先建立一个栈stack;
    int i,result = 0;//给结果赋初值0;
    char input[STRING_SIZE];//定义一个字符数组并定义最大限度

    stack = (StackPtr)malloc(sizeof(Stack));//给予空间

    if (Stack_Init(stack))//调用初始化
    {
        printf("请输入表达式:\n");
        gets(input);

        for (i = 0; i < STRING_SIZE; i++)//STRING_SIZE计算不超过最大限度
        {
            if (input[i] == '#')
                break;

            if (input[i] == '(' || input[i] == '{' || input[i] == '[')//左括号进栈
            {
                Stack_Push(stack, input[i]);//把左括号的值放到栈里面
                ++result;//结果加一
            }
            else if (input[i] == ')' || input[i] == '}' || input[i] == ']')//右括号出栈
            {
                Stack_Pop(stack);//    if (!Stack_IsEmpty(s))   s->string[s->top--] = -1;栈出函数中有进行
                --result;
            }
        }

        if (result == 0)
        {
            printf("所有括号匹配成功!\n");
            return 0;
        }

        printf("有括号未匹配!\n");
        return 0;
    }
    return 0;
}

Status Stack_Init(StackPtr s)//初始化顺序栈
{
    s->top = -1;

    if (s == NULL)
    {
        printf("ERROR!!!分配内存失败!\n");
        return FALSE;
    }

    return TRUE;
}

void Stack_Pop(StackPtr s)
{
    if (!Stack_IsEmpty(s))
        s->string[s->top--] = -1;
    else
        printf("ERROR!!!栈为空,无法进行出栈操作!\n");
}

void Stack_Push(StackPtr s, char elem)
{
    if (!Stack_IsFull(s))
        s->string[s->top++] = elem;
    else
        printf("ERROR!!!栈已满,无法进行入栈操作!\n");
}

Status Stack_IsEmpty(StackPtr s)
{
    if (s->top == -1)
        return TRUE;

    return FALSE;
}

Status Stack_IsFull(StackPtr s)
{
    if (s->top == (STRING_SIZE - 1))
        return TRUE;

    return FALSE;
}
  • 写回答

1条回答 默认 最新

  • hmsy39 2021-10-03 21:44
    关注

    这个代码是使用栈结构后进先出的特性,判断一个字符串中的 "()[]{}" 这些括号是否相互匹配

    比如 ()({})[{}()] 都是括号匹配的例子,左小括号对应右小括号,

    比如 (] 就是括号不匹配的例子(左小括号和右中括号不匹配

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月15日
  • 已采纳回答 10月7日
  • 创建了问题 10月3日

悬赏问题

  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于#flink#的问题:关于docker部署flink集成hadoop的yarn,请教个问题flink启动yarn-session.sh连不上hadoop
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题