Sufijo de cálculo - C++

//#include<stack>
#include<iostream>
#include<string>
//#include<cctype>
//#include<cassert>
using namespace std;
#define SIZE 100
template<typename T>
class Stack{
public:
    Stack():tos(0){}
    bool empty()const{return tos==0;}
    void push(const T&);
    void pop();
    T& top();
    const T& top()const;
private:
    T s[SIZE];
    int tos;};
    
template<typename T>
void Stack<T>::push(const T&a){
	s[tos++]=a;} 
	
template<typename T>
void Stack<T>::pop(){
	tos--;
}

template<typename T>
T &Stack<T>::top(){
	return s[tos-1];
}

template<typename T>
const T& Stack<T>::top()const{
    return s[tos-1];
}

int jisuan(string exp);

int main(){
	string shuru;
	int a;
	while(1){
	 getline(cin,shuru);
	 a=jisuan(shuru);
	 cout<<a<<endl; 
	}}
	
int jisuan(string exp){
	Stack<int>operStack;
	char token,topToken;
    int a,b,c;
    for(int i=0;i<exp.length();i++){
    	token=exp[i];
    	if(token>='0'&&token<='9') {
		   a=token-48;
		   operStack.push(a);}
      else {
	        switch(token){
    		case' ':break;
    		case'+':b=operStack.top();
    		        operStack.pop();
					c=operStack.top();
					operStack.pop();
					operStack.push(c+b);
					break;
			case'-':b=operStack.top();
    		        operStack.pop();
					c=operStack.top();
					operStack.pop();
					operStack.push(c-b);
					break;
			case'*':b=operStack.top();
    		        operStack.pop();
					c=operStack.top();
					operStack.pop();
					operStack.push(c*b);
					break;
			case'/':b=operStack.top();
    		        operStack.pop();
					c=operStack.top();
					operStack.pop();
					operStack.push(c/b);
					break; 
			default:break;}
	  }
	}
		topToken=operStack.top();
		return topToken;	}
	

Supongo que te gusta

Origin blog.csdn.net/cangzhexingxing/article/details/124725391
Recomendado
Clasificación