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

📄 tran.h

📁 中缀表达求后缀表达式及其值
💻 H
字号:
#include<stdlib.h>

void count(double*num,int&top,char sym)
{
	double tem;
	if(top<=1)
		cout<<"输入错误!!!"<<endl;
	else
	{
		tem=num[top];
		top--;

		switch(sym)
		{
		case '+':num[top]+=tem;break;
		case '-':num[top]-=tem;break;
		case '*':num[top]*=tem;break;
		case '/':num[top]/=tem;break;
		default:cout<<"error!!!"<<endl;
		}
	}
}

bool findnum(char*&exp,double*num,int&top,bool first)
{
	char tra;
	char str[20];
	char *p=str;
	bool find=false;

	tra=*exp;
	if(tra=='-'&&(*(exp-1)=='('||first))
	{
		*p++=tra;
		exp++;
	}
	while(true)
	{
		tra=*exp;
		if(tra>='0'&&tra<='9'||tra=='.')
		{			
			*p++=tra;
			exp++;
			if(!find)
				find=true;
		}
		else 
		{
			if(find)
			{
				*p='\0';
				top++;
				num[top]=atof(str);
			}
			break;
		}
	}
	if(find)
		return true;
	else
		return false;
}

double translate(char *exp)
{
	char TRACK[20];
	int top=0;
	double *num;
	int head=0;
	char tra;
	bool first=true;
	bool key=true;
	bool space=false;
	
	num=new double[20];
	TRACK[top]='#';
	num[head]=0.0;

	while(key)
	{
	
		if(findnum(exp,num,head,first))
		{
			if(space)
				cout<<",";
			cout<<num[head];
			space=true;
		}
		
		tra=*exp++;

		if(first)
			first=false;

		switch(tra)
		{
		case '#':while(top>0)
				 {
					 cout<<TRACK[top];
					 count(num,head,TRACK[top]);
					 top--;
				 }
				cout<<"#";
				key=false;break;
		case ')':while(TRACK[top]!='(')
				 {
					 cout<<TRACK[top];
					 count(num,head,TRACK[top]);
					 top--;
					 space=false;
				 }
				top--;break;
		default:while(track_pre(TRACK[top])>=sign_pre(tra,key))
				{
					cout<<TRACK[top];
					count(num,head,TRACK[top]);
					top--;
					space=false;
				}
				top++;
				TRACK[top]=tra;break;
		}
	}
	if(head!=1)
		cout<<"error!!!"<<endl;
	return num[head];
}
	   



⌨️ 快捷键说明

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