控制台计算器将浮点数推入堆栈时出现问题
Problem pushing a float to stack for console Calculator
我正在写一个基于c++控制台的计算器。
它的工作方式是reample由一个迭代器组成,该迭代器读取总和,并将所有数字放入堆栈中。-当读取方程遇到操作符时,例如:'+',它调用add()函数,该函数接受两个参数:add(float topOfStack, nextNumber());-nextNumber处理BODMAS,如果下一个数字正在被除法或乘法,它将首先解决这些问题,否则它将返回数字。-之前的和从堆栈中弹出,并将结果加到堆栈中。
这是我到目前为止写的代码:根据调试器,我在这行this->numberStack->push(f);
中得到某种错误-但它没有告诉我问题是什么。如果你能帮助我,我会很感激的。
#include <iostream>
#include <cstdlib>
#include <sstream>
#include <string>
#include <cmath>
#include <cstring>
#include <stack>
using namespace std;
class Calculator
{
public:
Calculator();
virtual ~Calculator();
void readEquation();
float nextInteger(int position);
string equation;
protected:
float add(float firstNumber, float secondNumber);
float subtract (float firstNumber, float secondNumber);
float multiply (float number, float multiple);
float divide (float numerator, float denominator);
float squareRoot(float number);
float square(float number);
private:
void temporaryPrintStack();
float answer();
stack<float>* numberStack;
};
Calculator::Calculator()
{
//c
}
Calculator::~Calculator()
{
//dtor
}
float Calculator::add(float numOne,float numTwo)
{
return numOne+numTwo;
}
float Calculator::subtract(float numOne,float numTwo)
{
return numOne-numTwo;
}
float Calculator::multiply(float number, float multiple)
{
return number*multiple;
}
float Calculator::divide(float numerator, float denominator)
{
return numerator/denominator;
}
float Calculator::square(float number)
{
return number*number;
}
float Calculator::squareRoot(float number)
{
return 0;
}
float Calculator::answer()
{
return this->numberStack->top();
}
void Calculator::temporaryPrintStack()
{
for(int index = 0; index <= (int) this->numberStack->size();index++)
{
cout<<this->numberStack->top()<<", ";
this->numberStack->pop();
}
}
void Calculator::readEquation()
{
int position=0;
stringstream stringStream;
string::iterator iterator;
for(iterator = this->equation.begin();iterator!=this->equation.end();iterator++,position++)
{
if(*iterator>='0' && *iterator<='9' || *iterator=='.')//can this be replaced by isdigit()?
{
stringStream<<*iterator;
}
if(*iterator=='+')
{
string number;
stringStream>>number;
cout<<number<<" pushed to stack."<<endl;
float f = atof(number.c_str());
this->numberStack->push(f);
//this->numberStack->push(this->add(this->numberStack->top(),this->nextInteger(position)));
this->temporaryPrintStack();
}
if(*iterator=='=')
{
this->answer();
}
}
}
int main()
{
Calculator *c=new Calculator();
std::cout<<"Enter your sum in this form 2+2/1=";
getline(cin,c->equation,'=');
c->readEquation();
system("pause");
delete c;
return 0;
}
stack<float>* numberStack;
声明你的类将保存一个指向stack<float>
的指针。它不会而不是分配该对象。你需要自己做这件事(可能在构造函数中),还要注意在析构函数中删除该对象。
// in ctor
numberStack = new stack<float>;
// in dtor
delete numberStack;
或者,不要使用指针,而是使用普通对象。
看起来您忘记在Calculator构造函数中初始化堆栈了。实际上你可以简单地使用:
stack<float> numberStack;
相关文章:
- 算法问题:查找从堆栈中弹出的所有序列
- 堆栈问题(平衡表达式问题集)
- 使用指针计算堆栈问题的大 O 表示法
- 使用泛型类型推送到堆栈时出现问题
- 我的堆栈和库存清单程序的结构有什么问题?
- C++ - 面试问题中的堆栈上的对象
- 在我自己的堆栈中实现top的问题
- 创建堆栈时出现问题!(街机游戏)
- 我遇到了有关递归的堆栈问题
- 关于 std::堆栈推送的分段错误的问题
- C++堆栈内存管理问题
- 在使用 In Order 遍历成员函数时引发异常(堆栈溢出)时出现问题
- 我正在尝试使用回溯来解决 N queen 问题,但在编译时它会给出运行时错误(动态堆栈缓冲区溢出)
- 数组问题:变量周围的堆栈'arr'已损坏
- 关于在C 中实现堆栈的问题
- 未定义对调用堆栈库的引用出现问题
- 我的堆栈中的弹出方法有什么问题?
- 调试堆栈损坏问题
- 我的矩阵堆栈实现(OpenGL ES 2.0)有什么问题
- 无锁的堆栈:在POP()期间检查危险指针时可见性问题