Я гуглил и искал свои проблемы, и, возможно, я не использую правильные условия поиска, потому что я не нахожу решения своей проблемы.
Что я пытаюсь сделать, это сделатьПостфиксное выражение калькулятора с использованием методов и шаблонов push и pop.
По словам моего профессора
Input
Входные данные представляют собой строку, которая представляет выражение Postfix.Чтобы упростить задачу, ваш калькулятор будет работать только с однозначными неотрицательными целыми числами.В строке допускаются только следующие символы:
операторы '+', '-'.'*' и '/' цифры от 0 'до' 9 'пробел (пробел) символ' '
Пример ввода: 2 4 3 * +
Результат: 14
Чтобы обработать пробелы во входных данных, вам нужно сделать одно небольшое дополнение к алгоритму на стр. 204 вашего учебника:
if (ch is a blank)
ignore it end if
Программа разделена на 3 файла,Основной файл, шаблон и виртуальный шаблон.Он хочет как можно меньше в основном файле, большая часть проверок и расчетов выполняется в шаблоне.
#include <iostream>
#include <string>
#include "ArrayStack.h"
using namespace std;
int main()
{
ArrayStack<string> stack;
string items;
bool done = false;
char decision;
while(!done) // check to see if the user wants to do more calculations
{
cout << "Enter postfix expression: ";
getline(cin, items);
for(int x = 0;x < items.length();x++)
{
stack.push(&items[x]);
cout << "Pushing " << &items[x] << endl;
}
cout << "Done? Y/N: ";
cin >> decision;
if((decision == 'y') || (decision == 'Y')) done = true;
}
}
и вот относительная функция шаблона
template<class ItemType>
bool ArrayStack<ItemType>::push(const ItemType& newEntry)
{
bool result = false;
if (top < MAX_STACK - 1) // Does stack have room for newEntry?
{
//////////////////////////////////////
if(isdigit(&newEntry))
{
top++;
items[top] = newEntry;
result = true;
}
//////////////////////////////////////
} // end if
return result;
} // end push
Моя проблемаisdigit ничего не может сделать, когда он является постоянным символом, но мне не разрешено проверять, является ли это цифра, пробел или / - + * в основном файле.Я не уверен, как поступить.Я использую неправильную функцию или просто неправильно ее использую?