我正在开发一个程序,为我的一门计算机科学课程计算后缀表达式的结果。该程序使用堆栈 ADT 来完成此操作。
我已经编写了程序,但相信可能会有错误,因为某些表达式的结果不正确。我不确定我的错误在哪里。
此外,当输入文件为空时,程序会生成一个值 32767。它来自哪里?
表达式:3 4 + 3 * 值 = 21。
表达式:5 4 3 2 1 - + / * 值 = 0。(应该是 5)
表达式:9 5 2 4 + - 2 * * 值 = 18。(应该是 -18)
头文件:
#ifndef STACK_H
#define STACK_H
#include <cstdlib>
#include <iostream>
class Stack
{
public:
typedef int Item;
static const int CAPACITY = 50;
// Constructor
Stack() { used = 0; }
// Modification Member Functions
void push(Item entry) {
data[used] = entry;
++used;
}
Item pop() {
if(!empty())
{
--used;
return data[used];
}
}
// Constant Member Functions
bool empty() const { return used == 0; }
int size() const { return used; }
private:
// Data Members
Item data[CAPACITY];
int used;
};
#endif
主程序:
#include <cstdlib>
#include <iostream>
#include <fstream>
#include "stack.h"
using namespace std;
int main()
{
Stack s;
string input;
ifstream infile;
int final, operand1, operand2, result;
char infile_name[80];
cout << "Enter input file name: ";
cin >> infile_name;
cout << endl;
infile.open(infile_name);
while(!infile)
{
cout << "Could not open file." << endl;
return 0;
}
while (!infile.eof())
{
getline(infile, input);
cout << "Expression: ";
for (int i = 0; i < input.length(); i++)
{
cout << input[i];
if(input[i] == '1' || input[i] == '2' || input[i] == '3' || input[i] == '4' || input[i] == '5' || input[i] == '6' || input[i] == '7' || input[i] == '8' || input[i] == '9')
s.push(input[i] - '0');
if(input[i] == '+')
s.push(s.pop() + s.pop());
if(input[i] == '-')
s.push(s.pop() - s.pop());
if(input[i] == '*')
s.push(s.pop() * s.pop());
if(input[i] == '/')
s.push(s.pop() / s.pop());
}
final = s.pop();
cout << endl << "Value = " << final << "." << endl << endl;
}
}