|  | 
 
| 
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  
这段代码有一些问题: 
1. 没有包含所需的头文件。 
2. 定义了两个相同的结构体opnds和optrs,可以只定义一个结构体用于存放栈。 
3. Push函数和Pop函数中没有正确地处理栈顶元素的赋值。
 
下面是修正后的代码:
 复制代码#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MaxSize 50
typedef struct             
{
    char data[MaxSize];
    int top;
} Stack;
void Init_Stack(Stack *&S)  
{
    S = (Stack *)malloc(sizeof(Stack));
    S->top = -1;
}
bool Push(Stack *&S, char e)  
{
    if(S->top == MaxSize - 1)
        return false;
    S->top++;
    S->data[S->top] = e;
    return true;
}
bool Pop(Stack *&S, char &e)  
{
    if(S->top == -1)
        return false;
    e = S->data[S->top];
    S->top --;
    return true;
}
bool GetTop(Stack *&S, char &e)  
{
    if(S->top == -1)
        return false;
    e = S->data[S->top];
    return true;
}
bool Match(char *p)     
{
    int i;
    Stack *S;
    char topChar;
    
    Init_Stack(S);
    for(i = 0; p[i] != '\0'; i++)  
    {
        if(p[i] == '(')
        {
            Push(S, p[i]);   // 将左括号入栈
        }
        else if(p[i] == ')')
        {
            if(!Pop(S, topChar))   // 如果栈空,说明右括号没有匹配的左括号
                return false;
        }
    }
    if(S->top != -1)
        return false;
    else
        return true;
}
int main()
{
    char p[MaxSize];
    int i;
    printf("请输入算术运算表达式:\n");
    gets(p);
    if(Match(p))
        printf("括号匹配成功!\n");
    else
        printf("括号匹配失败!\n");
    return 0;
}
这段代码实现了检查一个表达式中的括号是否匹配。根据输入的表达式,使用堆栈来检查左右括号的匹配情况。
 
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 | 
 |