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

Đề tài: stack trong c++

  1. #1
    Ngày gia nhập
    03 2018
    Bài viết
    4

    Mặc định stack trong c++

    em có code ct chuyển trung tố sang tiền tố....
    Code:
    	if (isope(token)){
    			if(ope.empty()){
    				ope.push(token);
    			}else{
    				if(prio(token) > prio(ope.top())){
    					ope.push(token);
    				}else{
    				//	while(prio(token) <= prio(ope.top())){
    							out.push_back(ope.top());
    							ope.pop();
    				//	}
    					ope.push(token);
    				}
    			}
     		}
    đây là đoạn em bị lỗi, nếu em bỏ vòng while đi thì t chạy bình thường mà để vào thì lại bị lỗi. em đoán là lỗi khi em làm việc với stack.....mọi người giải thích hộ em với ạ

    ------
    đây là toàn bộ chuơng trình của em
    Code:
    #include <iostream>
    #include <stack>
    #include <fstream>
    #include <string>
    using namespace std;
    bool isope(char a){
    	switch(a){
    		case'*':
    		case'/': 
    		case'+': 
    		case'-': return true;
    		default : return false;
    	}
    	
    }
    int prio(char a){
    	switch(a){
    		case'*':
    		case'/':return 2;
    		case'+':
    		case'-':return 1;
    		case'(': 
    		case')':return 0;
    		default: return -1;
    	}
    }
    
    
    
    int main(){
    	string nguon,out;
    	stack <char> ope;
    	int i;
    
    	ifstream file;
    		file.open("input.txt",ios::in);
    			getline(file,nguon);
    		file.close();
    	
    	cout << "xau infix: "<<nguon<<endl;
    	
    	int len=nguon.size();
    	
    	for(i=len-1;i>=0;i--){
    		char token = nguon[i];
    		if (token >= 'a' && token <= 'z' || token >='A' && token <= 'Z'){
    			out.push_back(token);
    		}
    		if (isope(token)){
    			if(ope.empty()){
    				ope.push(token);
    			}else{
    				if(prio(token) > prio(ope.top())){
    					ope.push(token);
    				}else{
    				//	while(prio(token) <= prio(ope.top())){
    							out.push_back(ope.top());
    							ope.pop();
    					}
    				//	ope.push(token);
    				}
    			}
     		}
     		if (token == ')'){
     			ope.push(token);	
    		}
    		if (token == '('){
    			while(ope.top() != ')'){
    				out.push_back(ope.top());
    				ope.pop();
    			}
    			ope.pop();
    		}
    	}	
    	while(!ope.empty()){
    		out.push_back(ope.top());
    		ope.pop();
    	}
    	cout<<endl;
    	len = out.size();
    	for(i=len-1;i>=0;i--){
    		cout << out[i] <<" ";
    	}
    }
    Đã được chỉnh sửa lần cuối bởi dasunkid : 22-04-2018 lúc 11:24 PM. Lý do: làm rõ hơn câu hỏi

  2. #2
    Ngày gia nhập
    12 2015
    Nơi ở
    Đà Nẵng
    Bài viết
    366

    Trích dẫn Nguyên bản được gửi bởi dasunkid Xem bài viết
    em có code ct chuyển trung tố sang tiền tố....
    C++ Code:
    1.     if (isope(token)){
    2.             if(ope.empty()){
    3.                 ope.push(token);
    4.             }else{
    5.                 if(prio(token) > prio(ope.top())){
    6.                     ope.push(token);
    7.                 }else{
    8.                 //  while(prio(token) <= prio(ope.top())){
    9.                             out.push_back(ope.top());
    10.                             ope.pop();
    11.                 //  }
    12.                     ope.push(token);
    13.                 }
    14.             }
    15.         }
    đây là đoạn em bị lỗi, nếu em bỏ vòng while đi thì t chạy bình thường mà để vào thì lại bị lỗi. em đoán là lỗi khi em làm việc với stack.....mọi người giải thích hộ em với ạ

    ------
    đây là toàn bộ chuơng trình của em
    C++ Code:
    1. #include <iostream>
    2. #include <stack>
    3. #include <fstream>
    4. #include <string>
    5. using namespace std;
    6. bool isope(char a){
    7.     switch(a){
    8.         case'*':
    9.         case'/':
    10.         case'+':
    11.         case'-': return true;
    12.         default : return false;
    13.     }
    14.    
    15. }
    16. int prio(char a){
    17.     switch(a){
    18.         case'*':
    19.         case'/':return 2;
    20.         case'+':
    21.         case'-':return 1;
    22.         case'(':
    23.         case')':return 0;
    24.         default: return -1;
    25.     }
    26. }
    27.  
    28.  
    29.  
    30. int main(){
    31.     string nguon,out;
    32.     stack <char> ope;
    33.     int i;
    34.  
    35.     ifstream file;
    36.         file.open("input.txt",ios::in);
    37.             getline(file,nguon);
    38.         file.close();
    39.    
    40.     cout << "xau infix: "<<nguon<<endl;
    41.    
    42.     int len=nguon.size();
    43.    
    44.     for(i=len-1;i>=0;i--){
    45.         char token = nguon[i];
    46.         if (token >= 'a' && token <= 'z' || token >='A' && token <= 'Z'){
    47.             out.push_back(token);
    48.         }
    49.         if (isope(token)){
    50.             if(ope.empty()){
    51.                 ope.push(token);
    52.             }else{
    53.                 if(prio(token) > prio(ope.top())){
    54.                     ope.push(token);
    55.                 }else{
    56.                 //  while(prio(token) <= prio(ope.top())){
    57.                             out.push_back(ope.top());
    58.                             ope.pop();
    59.                     }
    60.                 //  ope.push(token);
    61.                 }
    62.             }
    63.         }
    64.         if (token == ')'){
    65.             ope.push(token);   
    66.         }
    67.         if (token == '('){
    68.             while(ope.top() != ')'){
    69.                 out.push_back(ope.top());
    70.                 ope.pop();
    71.             }
    72.             ope.pop();
    73.         }
    74.     }  
    75.     while(!ope.empty()){
    76.         out.push_back(ope.top());
    77.         ope.pop();
    78.     }
    79.     cout<<endl;
    80.     len = out.size();
    81.     for(i=len-1;i>=0;i--){
    82.         cout << out[i] <<" ";
    83.     }
    84. }
    Có lỗi là lỗi gì, không chạy được hay chạy được mà sai, báo lỗi cụ thể là thế nào

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