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;
}```