Alice_computer 2021-10-23 11:44 采纳率: 0%
浏览 15
已结题

运用栈计算多项式时结果出现错误

用栈计算多项式
拿到的代码是定义了一个int栈,一个char栈,想试着只用一个char栈做出来
代码:


//定义一个字符栈 
typedef struct
{
    char elem[Stack_Size];
    int top;
}seqstack;
 
//栈的初始化 
seqstack *initStack()
{
    seqstack *s;
    s = (seqstack*)malloc(sizeof(seqstack));
    s->top = -1;
    return s;
}

int push(seqstack *S,char x)
{
    if(S->top==Stack_Size-1)
        return 0;
    S->top++;
    S->elem[S->top]=x;
    return 1;
}

int pop(seqstack *S,char *x)
{
    if(S->top==-1)
        return 0;
    else
    {
        *x = S->elem[S->top];
        S->top--;
        return 1;
    }
}

 char gettop(seqstack *S)
 {
     if(S->top==-1)
         return '#';
     else
     {
         
         return (S->elem[S->top]);
     }
 }
 
 char compare(char a,char b)
 {
     if(a=='+'||a=='-')
         if(b=='+'||b=='-'||b==')'||b=='#')
             return '>';
         else
             return'<';
     if(a=='*'||a=='/')
         if(b=='(')
             return '<';
         else
             return '>';
     if(a=='(')
         if(b=='+'||b=='-'||b=='*'||b=='/'||b=='(')
             return '<';
         else if(b==')')
             return '=';
     if((a==')')&&(b!='('))
         return '>';
     if(a=='#'&&b!=')')
         if(b=='=')
             return '=';
         else
             return '<';
 }
 
 int Op(int m,int n,char op)
 {
     if(op=='+')
         return m+n;
     if(op=='-')
         return n-m;
     if(op=='*')
         return m*n;
     if(op=='/')
         return m/n;
 }
 
 void Exp(char *s,int *l)
 {
    seqstack *OPRD =  initStack();//数字栈 
    seqstack *OPTR =  initStack();//符号栈 
    char ch,x,op;
    int M,N;
    int c,data,val,i = 0;
    char m,n;
    push(OPTR,'#');
    c = strlen(s);
    while(i<c)
    {
        ch = s[i];
        if(ch>='0'&&ch<='9')
        {
            data = s[i]-'0';
            ++i;
            while(s[i] >= '0'&&s[i]<='9')
            {
                data = data*10+s[i]-'0';
                ++i;
            }
            ch = s[i];
            push(OPRD,data);
        }
        else
        {
            switch(compare(gettop(OPTR),ch))
            {
            case '<':push(OPTR,ch);
                ch = s[++i];break;
            case '=':pop(OPTR,&x);
                ch = s[++i];break;
            case '>':
                pop(OPTR,&op);
                pop(OPRD,&m);
                M=m-'0';
                pop(OPRD,&n);
                N=n-'0';
                val = Op(M,N,op);
                push(OPRD,val);
                break;
            }
        }
    }
    val = gettop(OPRD);
    *l = val;
 }
int main()
{
    char s[MAXLEN];
    int l;
    cout<<"写一个带有“+”、“-”、“*”、“/”、“)”、“(”等符号的复杂式子,并于式子末尾加上“#”:"<<endl;
    gets(s);
    Exp(s,&l);
    cout<<"答案是:"<<l<<endl;

    system("pause");
    return 0;
}

因为都是char栈,所以取数字栈栈顶的时候做了一步转换。程序没有报错,但是计算1+1时结果变为-94,1*1结果为-95,想问这个程序哪里出了问题

  • 写回答

1条回答 默认 最新

  • 有问必答小助手 2021-10-25 10:51
    关注

    你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


    本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


    因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。

    评论

报告相同问题?

问题事件

  • 系统已结题 10月31日
  • 创建了问题 10月23日

悬赏问题

  • ¥15 matlab有关常微分方程的问题求解决
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable