Problem out of range with stack class
Dec 26, 2011 at 11:16pm UTC
I'm trying to create a calculator that contains two stacks. One stack contains all the numbers and another contains the operands such as */+- etc. Every time i run my program it says the subscript goes out of range and i can't figure out where the issue is.
This is where i run my solution.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
int solution(MyStack<char > stackC, MyStack<int > stackN)
{
int sum = 0; //total returned value at conclusion
int temp=0; //temp value that stores values from previous methods
for (int i = 0; i < 3; i++) //first step parenthesis,then mult/division,then addition/subtraction
{
for (int j = 0; j < stackC.amountOfInfoContained(); j++)
{
dispStacks(stackC,stackN);
switch (i)
{
/* case 0:
{
}*/
case 1: //mult and division
{
if (stackC.containedElement(j) == '*' )
{
temp = multiply(stackN.containedElement(j),stackN.containedElement(j+1));
stackN.atElement(j,temp);
stackN.removeAt(j+1);
stackC.removeAt(j);
sum+=temp;
}
if (stackC.containedElement(j) == '/' )
{
temp = divide(stackN.containedElement(j),stackN.containedElement(j+1));
stackN.atElement(j,temp);
stackN.removeAt(j+1);
stackC.removeAt(j);
sum+=temp;
}
break ;
}
case 2: //addition and subtraction
{
if (stackC.containedElement(j) == '+' )
{
temp = addition(stackN.containedElement(j),stackN.containedElement(j+1));
stackN.atElement(j,temp);
stackN.removeAt(j+1);
stackC.removeAt(j);
sum+=temp;
}
if (stackC.containedElement(j) == '-' )
{
temp = subtraction(stackN.containedElement(j),stackN.containedElement(j+1));
stackN.atElement(j,temp);
stackN.removeAt(j+1);
stackC.removeAt(j);
sum+=temp;
}
break ;
}
}
}
}
return sum;
}
This is my stack class.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
template <typename T>
MyStack<T>::MyStack()
{
MyStack::size = -1;
}
template <typename T>
MyStack<T>::~MyStack(void )
{
}
template <typename T>
int MyStack<T>::amountOfInfoContained()
{
return MyStack::size;
}
template <typename T>
T MyStack<T>::pushBack()
{
if (MyStack::empty() == true )
{
return ;
}
else
{
stacks.pop_back();
MyStack::size = size-1;
return disks(size+1);
}
}
template <typename T>
void MyStack<T>::addElement(T newInfo)
{
MyStack::size = size+1;
MyStack::stacks.push_back(newInfo);
}
template <typename T>
bool MyStack<T>::empty()
{
if (MyStack::stacks.empty())
{
return true ;
}
else
return false ;
}
template <typename T>
T MyStack<T>::containedElement(int element)
{
return MyStack::stacks[element];
}
template <typename T>
bool MyStack<T>::emptyAt(int element)
{
if (MyStack::stacks[element]== NULL)
return true ;
else
return false ;
}
template <typename T>
void MyStack<T>::removeAt(int element)
{
stacks.erase(stacks.begin()+element-1);
updateStack();
}
template <typename T>
void MyStack<T>::updateStack()
{
int count = 0;
int temp = 0;
do
{
if (emptyAt(count) == true )
{
size--;
for (int i = count; i < size; i++)
{
stacks[i] = stacks[i+1];
}
}
count++;
}while (count < size);
}
template <typename T>
void MyStack<T>::atElement(int element,T value)
{
stacks[element] = value;
}
Any help would be grateful. Thank you
Topic archived. No new replies allowed.