leoRui_ 2022-08-06 14:26 采纳率: 33.3%
浏览 13
已结题

栈模拟简单综合运算器

问题遇到的现象和发生背景

栈模拟一个简单综合运算器,自己写出来的代码编译出的结果就非常离谱,不知道是哪里思路还是代码出现了问题。

问题相关代码,请勿粘贴截图
#include<stdio.h>
#include<string.h>
int judge(char ch)
{
    if(ch=='*'||ch=='/')   
    return 1;
    if(ch=='+'||ch=='-')
    return 0;
}
int main()
{
    int i,j;
    float num=0;
    int topA=-1,topB=-1;//栈顶下标
    float a[100];//元素栈
    char b[100];//符号栈
    char s[100]="32*3/2+19*2-2";
    for(i=0;i<strlen(s);i++)
    {
        if(s[i]>= '0' && s[i]<='9')
        {
            num=num*10+s[i]-'0';
        }
        else
        {
          a[++topA]=num;
          num=0;
          
            if(topB==-1)
            b[++topB]=s[i];
            else
            {
                if(judge(s[i])>b[topB])
                {
                    b[++topB]=s[i];
                }
                else
                {
                    if(b[topB]=='+')
                    {
                        a[topA-1]=a[topA-1]+a[topA];
                        topA-=1;
                        b[topB]=s[i];
                    }
                    if(b[topB]=='-')
                    {
                        a[topA-1]=a[topA-1]-a[topA];
                        topA-=1;
                        b[topB]=s[i];
                    }
                    if(b[topB]=='*')
                    {
                        a[topA-1]=a[topA-1]*a[topA];
                        
                        topA-=1;
                        b[topB]=s[i];
                    }
                    if(b[topB]=='/')
                    {
                        a[topA-1]=a[topA-1]/a[topA];
                        topA-=1;
                        b[topB]=s[i];
                    }
                }
            }
        }
        }
    i=topA;
      printf("%d  %d\n",topA,topB);
        for(j=topB;j>=0;j--)
        {
            if(b[j]=='+')
            {
                a[i-1]=a[i-1]+a[i];
                i--;
            }
            if(b[j]=='-')
            {
                a[i-1]=a[i-1]-a[i];
                i--;
            }
            if(b[j]=='*')
            {
                a[i-1]=a[i-1]*a[i];
                i--;
            }
            if(b[j]=='/')
            {
                a[i-1]=a[i-1]/a[i];
                i--;
            }
        }
        printf("%f\n",a[0]);
    }

运行结果及报错内容

其中我专门写了一个printf来看看遍历后的数据栈和符号栈topA和topB的值,结果topA=-2,topB=0.
为什么会这样呢?

  • 写回答

1条回答 默认 最新

  • leoRui_ 2022-08-06 14:31
    关注

    第18,19行源代码是这样的

    for(i=0;i<strlen(s);i++)
    {
    if(s[i]>= '0' &&s[i]<='9')
    }
    

    不知道为什么贴出来就变了

    评论

报告相同问题?

问题事件

  • 系统已结题 8月14日
  • 创建了问题 8月6日

悬赏问题

  • ¥15 远程访问linux主机超时
  • ¥15 odoo17存货管理优势于中国国内该行业传统ERP或MES的详细解读和举例
  • ¥15 CPU卡指令整合指令数据都在图片上
  • ¥15 火车票关联12306问题
  • ¥15 odoo17处理受托加工产品
  • ¥15 如何用MATLAB编码图三的积分
  • ¥15 圆孔衍射光强随孔径变化
  • ¥15 MacBook pro m3max上用vscode运行c语言没有反应
  • ¥15 ESP-PROG配置错误,ALL ONES
  • ¥15 结构功能耦合指标计算