⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 operation.cpp

📁 数据结构里面对于表达式的弹栈运算,将表达式转化成后缀表达式
💻 CPP
字号:
#include<iostream>
#include<cmath>

using namespace std;

#include"operation.h"

operation::operation(int a)
			:s(a)
{
}

void operation::AddOperand(int value)
{
	s.Add(value);
}

Boolean operation::GetTwoOperands(int &left, int &right)
{
	if(s.IsEmpty())
	{
		//cerr<<"No Operand!"<<endl;
		return False;
	}

	right = s.Delete();

	if(s.IsEmpty())
	{
		//cerr<<"No Operand!"<<endl;
		return False;
	}

	left = s.Delete();

	return True;
}

void operation::DoOperator(char op)
{
	int left, right;
	Boolean result;

	result = GetTwoOperands(left,right);

	if(result == True)
	{
		switch(op)
		{
		case '+':
			s.Add(left + right);
			break;

		case '-':
			s.Add(left - right);
			break;

		case '*':
			s.Add(left * right);
			break;

		case '/':
			if(right==0.0)
			{
				cerr<<"Divided by 0!"<<endl;
				Clear();
			}
			s.Add(left / right);
			break;

		}
	}
	else
		Clear();
}

void operation::Clear()
{
	s.MakeEmpty();
}

void operation::Run()
{
	char a[100];
	char ch;
	int b=0;
   for(;cin>>a[b],a[b] != '=';b++) 
	   ;
   a[b]='=';
   b=b+1;  
   int size=b;
	while(b!=-1)
	{
	    if(a[b-2]=='-'||a[b-2]=='+')
			{char c=a[b-1];
			a[b-1]=a[b-2];
			a[b-2]=c;
			}
	   if(a[b-2]=='*'||a[b-2]=='/')
		 {int d=b;
		  for(;;d--)
		{
			if(a[d-2]==')'||a[d-2]=='(')
			{char c=a[d-1];
			a[d-1]=a[d-2];
			a[d-2]=c;
				break;
			}
			if(a[d-2]=='+'||a[d-2]=='-')
			{
				char c=a[d-2];
			a[d-2]=a[d-1];
			a[d-1]=a[d+1];
			a[d+1]=c;
			b=d+1;
			break;
			}
		}			
	}
		b--;
		if(b==0)
			b=-1;
	}


for(int i=0;i<size;i++)
{if (a[i]=='('||a[i]==')')
a[i]=' ';
}





	int newoperand;

	Clear();                                            
    int j=0;
	while(a[j]!= '=')
	{
		switch(a[j])
		{
		case '+':
		case '-':
		case '*':
		case '/':
			DoOperator(a[j]);
			break;

		default:
			if(a[j]!=' ')
			{
			cin.putback(a[j]);                            
			cin>>newoperand;                               
			AddOperand(newoperand);                         
			break;
			}
		}
		j++;
	}

	cout<<"The result is: "<<s.stack[s.top]<<endl;

}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -