| 网站首页 | 业界新闻 | 群组 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
雷速体育发帖软件开发QQ118000023C语言培训|一对一辅导|零基础学编程LightningChart 快速先进的.Net图表控件
共有 1104 人关注过本帖
标题:用栈实现计算器。想不出来错在哪里?最后运行不出来结果。
只看楼主 收藏
yangtya
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2017-3-21
  问题点数:0  回复次数:1   
用栈实现计算器。想不出来错在哪里?最后运行不出来结果。
程序代码:

class stack                        //栈类
{
    public:
        stack();
        ~stack();
        void clearstack();        //清空
        int isempty();            //判空
        int length();            //求长度
        char gettop();            //取栈顶元素
        int push(char);            //进栈
        int pop(char*);            //出栈
        int traverse();            //遍历
    protected:
        char *base;                //栈底指针
        char *top;                //栈顶指针
};
上面是stack.h
程序代码:
#include <iostream>
#include "stack.h"
using namespace std;
stack::stack()
{
    top=base=new char [10];
}
stack::    ~stack()
{
    delete [] base;
}
void stack::clearstack()        //清空
{
    top=base;
}
int stack::isempty()             //判空
{
    if(top==base)
        return 1;
    else
        return 0;
}
int stack::length()             //求长度
{
    return top-base;
}
char stack::gettop()            //取栈顶元素
{
    if(top==base)
        return '\0';
    else
        return *(top-1);
}
int stack::push(char c)         //进栈
{
    if(top-base==9)
        return 0;
    else
    {
        *top=c;
        top++;
        return 1;
    }
}
int stack::pop(char* c)             //出栈
{
    if(top==base)
        return 0;
    else
    {
        c=top;
        top--;
        return 1;
    }
}
int stack::traverse()            //遍历
{
    if(top==base)
        return 0;
    else
    {
        for(char *p=top-1;p>top-1;p--)
        {
            cout<<*p<<"->";
        }
        cout<<*p<<endl;
        return 1;
    }
}

上面是stack.cpp
程序代码:
#include <iostream>
#include "stack.cpp"
#include <cstring>
#include <cstdlib>
#define N 20
using namespace std;
int priority(char c)
{
    if(c=='+'||c=='-')
        return 2;
    else if(c=='*'||c=='/')
        return 3;
    else
        return 0;
}
int count(float a,char ope,float b)
{
    float sum;
    if(ope=='+')
        sum=a+b;
    else if(ope=='-')
        sum=a-b;
    else if(ope=='*')
        sum=a*b;
    else
        sum=a/b;
    return sum;
}

int main()
{
    char line[N];
    float x,y,result;
    char e;
    int len,i;
    stack save1,save2;
    for(i=0;i<=N;i++)
        cin>>line[i];
    len=strlen(line);
    for(i=0;i<=len-1;i++)
    {
     if(isdigit(line[i]))
     {
         save1.push(line[i]);
     }
     else
     {
         if(priority(line[i])>priority(save2.gettop()))
             save2.push(line[i]);
         else
        {
            x=save1.gettop();
            y=save1.gettop();
            e=save2.gettop();
            result=count(y,e,x);
        }
     }
    }
    cout<<result<<endl;
    return 1;
}
可能就错在这最后一个?
搜索更多相关主题的帖子: 计算器  
2017-03-26 14:58
武汉Boy
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2018-2-9
  得分:0 
不想看,算法不久是中缀转后缀么,自己下个断点看看,想当初自己第一次写这个玩意写了两个多小时
2018-02-09 20:21







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.055614 second(s), 8 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved