我正在開發一個程序,該程序計算我的一個計算機科學類的後綴表達式的結果。該程序使用堆棧ADT來實現這一點。使用堆棧的C++後綴表達式
我已經編寫了程序,但相信可能有錯誤,因爲某些表達式的結果不正確。我不確定我的錯誤在哪裏。
另外,當輸入文件爲空時,程序產生一個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;
}
}
爲什麼不使用'isdigit'而不是'input [i] =='1'' ... –
你試過調試過嗎? –