1.C语言 任意表达式求值。源码(栈的编辑应用
C语言 任意表达式求值。(栈的器教JM通讯源码应用
/*** 只适合整数的表达式求值 ***/
/***其中部分可作修改,表达式也可是学计输入的***/
#include "iostream.h"
const int n0=;
int s1[n0+1]; //操作数栈
char s2[n0+1]; //运算符栈
int t1,t2;
int num[4]; //提取表达式中的整数
void calcu() //一次计算
{
int x1,x2,x;
char p;
//弹出一个运算符
p=s2[t2--];
//弹出两个操作数
x2=s1[t1--];
x1=s1[t1--];
//进行一次运算
switch(p) {
case '+':x=x1+x2;break;
case '-':x=x1-x2;break;
case '*':x=x1*x2;break;
case '/':x=x1/x2;
}
//结果压入操作数栈
s1[++t1]=x;
}
int calculator(char *f)
{
int v,i=0;
char *p=f;
t1=t2=0; //设置空栈
while (*p!='\0')
switch(*p) {
case '+': case '-':
while (t2&&(s2[t2]!='('))
//执行先遇到的加、减、源码apacheatlas源码乘、编辑shiroispermit源码除运算
calcu();
//当前运算符进栈
s2[++t2]=*p;
//读下一个字符
p++;
break;
case '*': case '/':
if (t2&&(s2[t2]=='*')||(s2[t2]=='/'))
//执行先遇到的器教乘、除运算
calcu();
//当前运算符进栈
s2[++t2]=*p;
//读下一个字符
p++;
break;
case '(':
//左括号进栈
s2[++t2]=*p;
//读下一个字符
p++;
break;
case ')':
while (s2[t2]!='(')
//执行括号内的学计加、减、源码乘、编辑除运算
calcu();
//弹出左括号
t2--;
//读下一个字符
p++;
break;
default:
//把字符串转换成整数值
v=0;
do {
v=*v+*p-'0';
p++;
} while((*p>='0')&&(*p<='9'));
//操作数进栈
s1[++t1]=v;
num[i++]=v;
};
//执行先遇到的器教加、减、学计乘、源码目标源码除运算
while (t2) calcu();
//返回结果
return s1[t1];
}
void main()
{
char a[]="5*(+6)-";
cout<<calculator(a)<<endl;
cout<<"其中的编辑数字为:\n";
for (int i=0;i<4;i++)
{
cout<<num[i]<<' ';
}
cout<<endl;
}
原来做过的东西,是器教源码电影C++的,VC++6.0环境下调试运行成功。