# Calculate an expression with +/ - using stack

• 11-28-2011
Bexita
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;         };                                 NodePtr head; }; Stack::Stack() {         head =NULL;          } Stack::~Stack() {         //Let the compiler to do it } void Stack::push (int item) {         NodePtr pNew= new Node;         pNew -> data = item;         pNew -> next = head;         head = pNew; } int Stack::pop() {         int item = NULL;         try         {                 if ( head == NULL)                         throw exception ();                                                 NodePtr temp = head;                 head = head ->next;                                 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())                 return head-> data; } 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; }```
• 11-28-2011
laserlight
What is your idea? How does your program not work?