# Thread: Calculate an expression with +/ - using stack

1. ## Calculate an expression with +/ - using stack

Hi , i need to calculate an expression with +/- only , it will get result once it see '=' sign using stack linked list (for exp: 200-100=) ,result 100. (multi digit needed)

My code is not working , can someone enlighten me ? Thanks a lot

Code:
```
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <iomanip>
#include <ctime>
using namespace std;

const int MAX =100;
int getResult(char *);

class Stack
{
public:
Stack();
~Stack();
void push(int);
int pop();
int top ();

bool isEmpty () const;

private:

struct Node;
typedef Node* NodePtr ;

struct Node
{
int data;
NodePtr next;

};

};

Stack::Stack()
{
}
Stack::~Stack()
{
//Let the compiler to do it
}
void Stack::push (int item)
{
NodePtr pNew= new Node;
pNew -> data = item;
pNew -> next = head;
}

int Stack::pop()
{
int item = NULL;
try
{
if ( head == NULL)
throw exception ();

NodePtr temp = head;

item = temp ->data;

delete temp;
}
catch (exception e)
{
cout << " Empty exception caught : Remove head failed "<< endl;
}
return item;
}

bool Stack::isEmpty () const
{
return head == NULL;
}

int Stack::top ()
{
if (!isEmpty())
}

int main ()
{
char * exp = new char[MAX];
cout <<"Enter an expression" <<endl;
cin.getline(exp,MAX);
int result = getResult (exp);

cout <<result <<endl;

}

int getResult(char *exp)
{

int i =0;
int k,k1,k2;
int result = 0;
char *p;
Stack s;
p = &exp[0];

// Calculate the result if last element is '=' sign
while (*p!='=')
{
/* To remove spaces and tabs*/
while (*p ==' ' || *p =='\t')
{
p++;
}

// If is operand
if (isdigit(*p))
{
s.push(*p);

}
else
{
//If is operator +,-
k1 = s.pop();
k2 = s.pop();

switch (*p)
{
case '+' : 	result =k1 + k2;
break;

case '-' :  result =k1 - k2;
break

default : return result;

// push back to stack
s.push(result);
}

}

p++; // Go to next element

}

result= s.pop();

return result;
}```

2. What is your idea? How does your program not work?

Popular pages Recent additions