【发布时间】:2011-07-16 14:49:19
【问题描述】:
我正在编写一个基于 C++ 控制台的计算器。
它的工作方式是 - readEquation 由一个迭代器组成,该迭代器读取总和,并将所有数字放入堆栈中。 -当读取方程遇到运算符时,例如'+',它调用 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;
}
【问题讨论】:
-
这是作业是吗?像这样标记它。
-
@Erich Lancaster:你必须更具体地说明你看到什么样的错误消息或行为,而不是仅仅说
get some kind of error。
标签: c++ stack calculator