Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Tính kết quả cộng trừ bằng stack

  1. #1
    Ngày gia nhập
    10 2011
    Bài viết
    3

    Arrow Tính kết quả cộng trừ bằng stack

    Mình có 1 bài yêu cầu là nhập vào một biểu thức chỉ có cộng trừ ( vd :200+300-100=) sẽ in ra kq =400;

    Yêu cầu là dùng class stack linked list.


    Đây là code của mình nhưng ko in đc ra kết quả,các bạn xem lỗi ở chỗ nào nhé thanks.

    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 : cout<<"\nInvalid operator. Program exit.";
    						  
    				
    			// push back to stack
    			s.push(result);
    			}
    					
    		
    		}
    		
    		p++; // Go to next element
    		
    	}
    	
    	
    	result= s.pop();
    	
    	
    
    	return result;
    }
    Đã được chỉnh sửa lần cuối bởi bmtoan1989 : 28-11-2011 lúc 02:53 PM.

  2. #2
    Ngày gia nhập
    10 2011
    Bài viết
    3

    Giúp mình với

  3. #3
    Ngày gia nhập
    11 2008
    Bài viết
    0

    Bạn đang cho từng digit vào trong stack chứ không phải từng number
    Cái thứ 2: bạn thực hiện + - ngay sau khi stack có số đầu tiên, lúc đó stack mới chỉ được push 1 element vào, bạn pop ra 2 cái thì đâu có được
    //đọc qua code thấy thế, có gì sai đừng gạch mình :p

Các đề tài tương tự

  1. Đảo xâu kí tự bằng STACK, xuất ra kết quả chỉ là số?
    Gửi bởi vuongngocnam trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 10
    Bài viết cuối: 07-01-2014, 11:25 AM
  2. Lập trình C Đổi Số Nguyên Ra Số Nhị Phân Dùng Stack, lỗi không xuất ra được kết quả?
    Gửi bởi chungkhung trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 13-06-2013, 12:06 PM
  3. Cấu trúc dữ liệu Chuyển các phần tử từ stack này sang stack kia như thế nào?
    Gửi bởi rukawa1184 trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 9
    Bài viết cuối: 06-12-2011, 06:52 PM
  4. Xây dựng lớp Stack để quản lý các phần tử là số nguyên.
    Gửi bởi blue_23 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 11
    Bài viết cuối: 18-10-2010, 11:02 PM
  5. Code về stack | Chuyển hệ số 10 sang 2 dùng stack
    Gửi bởi ahappyboy89 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 13
    Bài viết cuối: 17-04-2009, 09:48 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn