您好我試圖編寫一個程序在C++中使用堆棧評估表達式,但結果是一個隨機數(地址內存可能,但它不是一個指針)。 這裏的堆棧template`評估與堆棧的表達式
#ifndef STACK_H_
#define STACK_H_
template <class Item>
class Stack {
public:
static const size_t Capacity=100;
Stack(){used=0;};
void push(const Item& insert){data[used]=insert; used++;};
void pop(){used--;};
Item top(){return data[used-1];};
private:
Item data[Capacity];
size_t used;
};
#endif /* STACK_H_ */
`
,這主要是與使用
#include <iostream>
#include <cstring>
#include "Stack.h"
using namespace std;
double manage_stack(istream& insert);
void evaluate(Stack<double> numbers, Stack<char> operations);
int main(){
double result;
result=manage_stack(cin);
cout<<result;
return 0;
}
double manage_stack(istream& insert){
double number;
char symbol;
Stack<double> numbers;
Stack<char> symbols;
while(insert.peek()!='\n'){
if(isdigit(insert.peek())||insert.peek()=='.'){
insert>>number;
numbers.push(number);
}
else if(strchr("+-*/",insert.peek())!=NULL){
insert>>symbol;
symbols.push(symbol);
}
else if(insert.peek()==')')
evaluate(numbers, symbols);
else
insert.ignore();
}
return numbers.top();
}
void evaluate(Stack<double> numbers, Stack<char> operations){
double n1, n2;
n2=numbers.top();
numbers.pop();
n1=numbers.top();
numbers.pop();
switch(operations.top()){
case'+':numbers.push(n1+n2);
break;
case'-':numbers.push(n1-n2);
break;
case'*':numbers.push(n1*n2);
break;
case'/':numbers.push(n1/n2);
break;
}
operations.pop();
}
誰能幫我2層的功能呢?提前致謝!
考慮'used'是指:堆棧頂部的元素,還是剛剛超過頂部的元素。 – 1201ProgramAlarm
沒有看到存儲被分配給'data'的任何跡象 – user4581301
'Item data [];'這不是合法的C++,當然也不是無限數組。 –