您好我试图编写一个程序在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++,当然也不是无限数组。 –