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

📄 jiangwei.txt

📁 五简单算术表达式的求值 要求: 1、 从键盘输入一个表达式:如(2-(4*5-2))/5=。 2、 操作数仅为一位整数1
💻 TXT
字号:
#include"stdafx.h"
#include"iostream.h"
#include"stdio.h"
#include"malloc.h"



typedef struct           /*定义栈*/
{
	char stack1[50];
	int top1;
}stacktype;


void sort(char str[],stacktype *p)     /*转换成逆波兰*/
{
	char stack2[20];
	int top2,i,j;
	i=top2=0;
	while(str[i]!='\0')
	{
		if(str[i]<='9'&&str[i]>='0')
			p->stack1[++p->top1]=str[i];
		else 
			if(str[i]=='+'||str[i]=='-')
			{	
				if(top2==0)
					stack2[++top2]=str[i];
				else
				{
					while(top2>0&&stack2[top2]!='(')
						p->stack1[++p->top1]=stack2[top2--];
					stack2[++top2]=str[i];
				}
			}
			else 
				if(str[i]=='(')
					stack2[++top2]=str[i];
				else 
					if(str[i]==')')
					{
						while(stack2[top2]!='(')
							p->stack1[++p->top1]=stack2[top2--];
						top2--;
					}
					else 
						if(str[i]=='*'||str[i]=='/')
						{
							j=top2;
							while(j>0&&stack2[j]!='(')
							{
								if(stack2[j]=='*'||stack2[j]=='/')
								{
									top2--;
									p->stack1[++p->top1]=stack2[j];
								}
								j--;
							}
							stack2[++top2]=str[i];
						}
					i++;
	}
	while(top2>0)
	{
		p->stack1[++p->top1]=stack2[top2--];
	}
}


int out_stack(int s[],int *top)      /*弹栈函数*/
{
	return s[(*top)--];
}

void Alu(stacktype *p)       /*计算逆波兰表达式*/
{
	char ch;
    int i,a,b,m;
	int stack3[20];
	int top3=0;
	for(i=1;i<=p->top1;i++)
	{
		ch=p->stack1[i];
		if(ch>='0'&&ch<='9')       /*当ch是数据时入栈*/
			stack3[++top3]=ch-'0';
		else                            /*当ch不是数据时,栈中头两个出栈,计算后入栈*/
		{
			if(ch=='*')
			{
			  b=out_stack(stack3,&top3);
			  a=out_stack(stack3,&top3);
			  m=a*b;
			}
			if(ch=='/')
			{
				b=out_stack(stack3,&top3);
			  a=out_stack(stack3,&top3);
			  m=a/b;
			}
			if(ch=='+')
			{
				b=out_stack(stack3,&top3);
			  a=out_stack(stack3,&top3);
			  m=a+b;
			}
			if(ch=='-')
			{
				b=out_stack(stack3,&top3);
			  a=out_stack(stack3,&top3);
			  m=a-b;
			}
			stack3[++top3]=m;
		}
	}
	cout<<"结果是:"<<stack3[top3]<<endl;
}



void main()
{
	char str[20];
	stacktype *p;
	p=(stacktype *)malloc(sizeof(stacktype));
	p->top1=0;
	gets(str);
	sort(str,p);
	Alu(p);
}

⌨️ 快捷键说明

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