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

📄 算术表达式正式版.cpp

📁 用VC++编写c++源程序
💻 CPP
字号:
#include<stdio.h> 
#include<stdlib.h>
 
typedef struct sqstack
{
	char *base; 
	char *top; 
	int ssize;
}sqstack;
int initstack(sqstack *s)
{ 
	(*s).base=(char *)malloc(10*sizeof(char));
	if(!(*s).base)
		exit(0);
	(*s).top=(*s).base;
	(*s).ssize=10;
	return 1;
}
int gettop(sqstack s,char *e)
{
	if(s.top>s.base)
	{
		*e=*(s.top-1);
		return 1;
	}
	else
		return 0;
}
int push(sqstack *s,char e)
{
	if((*s).top-(*s).base>=(*s).ssize)
	{
		(*s).base=(char *)realloc((*s).base,((*s).ssize+2)*sizeof(char));
		if(!(*s).base)
			exit(0);
		(*s).top=(*s).base+(*s).ssize;
		(*s).ssize+=2;
	}
	*((*s).top)++=e;
	return 1;
}
int pop(sqstack *s,char *e)
{ 
	if((*s).top==(*s).base)
		return 0;
	*e=*--(*s).top;
	return 1;
}

char precede(char t1,char t2)
{ 
	char f;
	switch(t2)
	{
	case '+':
	case '-':if(t1=='('||t1=='#')
				 f='<';
		else
			f='>';
		break;
	case '*':
	case '/':if(t1=='*'||t1=='/'||t1==')')
				 f='>';
		else
			f='<';
		break;
	case '(':if(t1==')')
			 {
				 exit(0);
			 }
		else
			f='<';
		break;
	case ')':switch(t1)
			 {
	          case '(':f='=';
		              break;
	          default: f='>';
			 }break;
	case '#':switch(t1)
			 {
	          case '#':f='=';
		          break;
	          case '(':exit(0);
			  default: f='>';
			 }
	}
	return f;
}
int in(char c)
{ 
	switch(c)
	{
	case'+':
	case'-':
    case'*':
    case'/':
    case'(':
    case')':
    case'#':return 1;
    default:return 0;
	}
}
char operate(char a,char theta,char b)
{
	char c;
	a=a-48;
	b=b-48;
	switch(theta)
	{
	case'+':c=a+b+48;
		break;
	case'-':c=a-b+48;
		break;
	case'*':c=a*b+48;
		break;
	case'/':c=a/b+48;
	}
	return c;
}
char expression() 
{
	sqstack optr,opnd;
	char a,b,c,x,theta;
	initstack(&optr);
	initstack(&opnd);
	push(&optr,'#');
	c=getchar();
	gettop(optr,&x);
	while(c!='#'||x!='#')
	{
		if(in(c)) 
			switch(precede(x,c))
		{
             case'<':push(&optr,c); 
	                 c=getchar();
	                 break;
             case'=':pop(&optr,&x);
	                 c=getchar();
	                 break;
             case'>':pop(&optr,&theta);
				 pop(&opnd,&b);
				 pop(&opnd,&a);
				 push(&opnd,operate(a,theta,b));
				 break;
		}
		else 
			if(c>='0'&&c<='9') 
			{
				push(&opnd,c);
				c=getchar();
			}
			else
			{
				printf("illegal operation\n");
				exit(0);
			}
			gettop(optr,&x);
	}
	gettop(opnd,&x);
	return x;
}
void main()
{
	char a;
	printf("请输入表达式以#结束\n");
	a=expression();
	a=a-48;
	printf("%d\n",a);
}

⌨️ 快捷键说明

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