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

📄 biaodashiqiuzhi.txt

📁 数据结构实验 表达式求值 课程设计 *** 只适合整数的表达式求值 ***/
💻 TXT
字号:
*** 只适合整数的表达式求值 ***/ 
/***其中部分可作修改,表达式也可是输入的***/ 
#include "iostream.h" 
const int n0=30; 
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]!='(')) 
//执行先遇到的加、减、乘、除运算 
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=10*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*(40+6)-39"; 
cout<<calculator(a)<<endl; 
cout<<"其中的数字为:\n"; 
for (int i=0;i<4;i++) 
{ 
cout<<num[i]<<' '; 
} 
cout<<endl; 
} 
原来做过的东西,是C++的,VC++6.0环境下调试运行成功。

⌨️ 快捷键说明

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