qq_14908935 2021-05-16 22:59 采纳率: 42.9%
浏览 18

这段利用栈计算中缀表达式的代码中,是main函数哪里错了吗,为什么报错呢?

#include <iostream>
#include <math.h>
#define maxSize 100
#define MIN 0.000001

using namespace std;

int calsub(float opond1,char op,float opond2,float &result)
{
    if(op=='+') result=opond1+opond2;
    else if(op=='-') result=opond1-opond2;
    else if(op=='*') result=opond1*opond2;
    else if(op=='/')
    {
        if(fabs(opond2)<MIN)
        return 0;
        else 
        result=opond1/opond2;
    }
    return 1;
}


int getpriority(char op)
{
    if(op=='+' || op=='-')
    return 0;
    else 
    return 1;
}

int calStackTopTwo(float s1[],int &top1,char s2[],int &top2)
{
    float opnd1;
    float opnd2;
    float result;
    char op;
    int flag;
    opnd2=s1[top1--];
    opnd1=s1[top1--];
    op=s2[top2--];
    flag=calsub(opnd1,op,opnd2,result);
    if(flag==0)
    cout<<"error";
    else
    s1[++top1]=result;
    
}
float calinfix(char infix[])
{
    float s1[maxSize]; int top1=-1;
    char s2[maxSize]; int top2=-1;
    int i=0;
    while(infix[i]!='\0')
    {
        if('0'<=infix[i]&&infix[i]<='9')
        {
            s1[++top1]=infix[i]-'0';
            ++i;
        }
        else if(infix[i]=='(')
        {
            s2[++top2]='(';
            ++i;
        }
        else if(infix[i]=='+' ||
                infix[i]=='-' ||
                infix[i]=='*' ||
                infix[i]=='/')
        {
            if(top2==-1 || s2[top2]=='(' || getpriority(infix[i])>getpriority(s2[top2]))
            {
                s2[++top2]=infix[i];
                ++i;
            }
            else
            {
                calStackTopTwo(s1,top1,s2,top2);
            }
        }
        else if(infix[i]==')')
        {
            while(s2[top2]!='(')
            {
                calStackTopTwo(s1,top1,s2,top2);
            }
        }
    }
    while(top2!='0')
    {
        calStackTopTwo(s1,top1,s2,top2);
    }

    return s1[top1];
}

int main()
{
    char test[maxSize]={'(','1','+','1',')','/','3','\0'};
    cout<<calinfix(test);
    return 0;
}
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-07 17:37
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 使用C#,asp.net读取Excel文件并保存到Oracle数据库
  • ¥15 C# datagridview 单元格显示进度及值
  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配