Tính toán giá trị biểu thức bằng Balan ngược (RPN)

Chào mọi người, mình có 1 file input.txt chứa biểu thức ở dạng trung tố và muốn chuyển sang dạng hậu tố, ở đây mình đã khai báo 1 đối tượng ifstream để đọc từng kí tự trong file và lưu vào 1 mảng vector.

mình đặt breakpoint và chạy từng dòng thì phát hiện chương trình bị lỗi ở đoạn
while (DoUuTien(str[i]) <= DoUuTien(Stack.top()) || !Stack.empty())
đây là lỗi nhờ các bạn sửa giúp mình ạ.

#include<iostream>
#include<fstream>
#include<stack>
#include<queue>
#include<cstring>
#include<vector>
using namespace std;
int DoUuTien(char x)
{
	if (x == '(')
		return 0;
	if (x == '+' || x == '-')
		return 1;
	if (x == '*' || x == '/')
		return 2;
	if (x == '^')
		return 4;
	if (x == '!')
		return 3;
	return 5;
}
int main()
{
	ifstream filein;
	vector<char> str;
	filein.open("input.txt");
	char x;
	while (filein >> x)
	{
		str.push_back(x);
	}
	stack<char> Stack;
	queue<char> Queue;
	for (int i = 0; i < str.size(); i++)
	{
		if (str[i] == '(')
			Stack.push(str[i]);
		if (str[i] == ')')
		{
			for (int j = 0; j < Stack.size(); j++)
			{
				do
				{
					Queue.push(Stack.top());
				} while (Stack.top() != '(');
			}
			Stack.pop();
		}	
		if (str[i]=='+'|| str[i] == '-' || str[i] == '*' 
			|| str[i] == '/' || str[i] == '(' 
			|| str[i] == '^' || str[i] == '!')
		{
			while (DoUuTien(str[i]) <= DoUuTien(Stack.top()) || !Stack.empty())
			{
				Queue.push(Stack.top());
			}
			Stack.push(str[i]);	
		}
		Queue.push(str[i]);
		while (!Stack.empty())
			Queue.push(Stack.top());
	}
	cout << Stack.size();
	system("pause");
	return 0;
}```

Lấy stack.top() của một stack rỗng.

1 Like

nhờ anh Trương Tấn Phát mà em tìm ra thêm nhiều lỗi sai trong code của mình. cám ơn anh.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?