Я создаю калькулятор целочисленных значений обратной польской нотации в c ++, написав динамический стек на основе указателей, но у меня возникли проблемы с методом toString в классе MyStack.
Вот немного фона о том, как мой код должен работать:
Описание методов:
constructor
: инициализация объекта, настройка необходимой памяти.
destructor
: освобождает любую память, которая может нуждаться в освобождении объектом.
clear()
: очищает стек.
pop()
: Удаляет и возвращает верхнее значение в стеке, если оно не пустое. Выдает исключение, если стек пуст при попытке выскочить. Выберите любое исключение.
push(int)
: принимает целое число в качестве единственного аргумента и помещает его в стек, если достаточно памяти.
size()
: возвращает размер стека в виде целого числа.
toString()
: возвращает строковое представление стека. Например, если в стеке содержится 8, 3, 2, 5
с 8
наверху, то это вернет [8, 3, 2, 5]
, отформатированный в точности так:
Калькулятор должен будет поддерживать следующие операции:
+
: добавление
-
: вычитание
*
: умножение
/
: деление
%
: модуль
?
: вывести текущее содержимое стека на экран с помощью метода toString ().
^
: выскакивает верхняя часть стека и отображает только извлеченное значение.
!
: выход из калькулятора.
Калькулятор будет непрерывно считывать ввод до! введен. Он может читать любое количество токенов в качестве входных данных (см. Ниже). Если в стеке недостаточно целых чисел для выполнения вычисления, должно отображаться #Not enough arguments.
. Если введено что-либо, кроме целых чисел или поддерживаемых операций, должно отображаться сообщение об ошибке #Invalid input.
, не прерывая остальные операции для конкретной строки ввода.
У меня проблемы с методом toString. Как преобразовать стек целых чисел в строки?
Мой код:
// main.cpp
// practice2
#include <iostream>
#include <list>
#include <string>
#include <algorithm>
#include <stack>
using namespace std;
struct Node
{
int data;
Node *next;
};
class MyStack
{
private:
Node *top;
public:
MyStack();
~MyStack();
void clear();
void push(int);
int pop();
int size();
string toString();
bool isEmpty();
};
MyStack::MyStack()
{
top = NULL;
};
MyStack::~MyStack()
{
while(!isEmpty())
{
pop();
}
};
void MyStack::push(int d)
{
Node *temp = new Node;
temp->data = d;
temp->next = top;
top = temp;
}
int MyStack::pop()
{
if(!isEmpty())
{
int value = top->data;
Node *oldtop = top;
top = oldtop->next;
delete oldtop;
return value;
} else
{
cout << "stack is empty"; //throw exception
exit(1);
}
}
string MyStack::toString()
{
//redo later
};
bool MyStack::isEmpty()
{
return (top == NULL);
}
int main()
{
MyStack *s = new MyStack();
s->push(8);
s->push(3);
s->push(2);
s->push(5);
delete s;
return 0;
}
Ожидаемый результат:
toString()
: возвращает строковое представление стека. Например, если в стеке содержится 8, 3, 2, 5
с 8
наверху, то это вернет [8, 3, 2, 5]
, отформатированный в точности так: