C语言实现逆波兰表达式(栈的应用) #includeiostream #includecstdio using namespace std; const int MAXSIZE = 110; char a[MAXSIZE]; double operNum[MAXSIZE]; ? double getSum(int* i){//地址传递,可以在边...

C语言实现逆波兰表达式(栈的应用)
#include<iostream>
#include<cstdio>
using namespace std;
const int MAXSIZE = 110;
char a[MAXSIZE];
double operNum[MAXSIZE];
?
double getSum(int* i){//地址传递,可以在边求值时边改变i的原值。如若是值传递,会导致值的重复算
double sum = 0.0;
int k = 0;
while(a[*i] >= '0' && a[*i] <= '9'){
sum = sum * 10 + a[*i] - '0';
(*i)++;
}
if(a[*i] == '.'){
(*i)++;
while(a[*i] >= '0' && a[*i] <= '9'){
sum = sum * 10 + a[*i] - '0';
(*i)++;
k++;
}
}
while(k!=0){
sum /= 10;
k--;
}
return sum;
}
int main(){
gets(a);//这样可以读入空格,要求以'#'结尾
int i=0;
int top=0;
double x1,x2;
while (a[i] != '#'){
if(a[i] >= '0' && a[i] <= '9'){
double f = getSum(&i);
operNum[top++] = f;
}else if(a[i] == ' '){
i++;
}else if(a[i] == '+'){
x1 = operNum[--top];
x2 = operNum[--top];
operNum[top++] = x1 + x2;
i++;
}else if(a[i] == '-'){
x1 = operNum[--top];
x2 = operNum[--top];
operNum[top++] = x2 - x1;
i++;
}else if(a[i] == '*'){
x1 = operNum[--top];
x2 = operNum[--top];
operNum[top++] = x1 * x2;
i++;
}else if(a[i] == '/'){
x1 = operNum[--top];
x2 = operNum[--top];
operNum[top++] = x2 / x1;
i++;
}
}
cout<<operNum[0]<<endl;
return 0;
}
织梦狗教程
本文标题为:c语言实现逆波兰表达式!


基础教程推荐
猜你喜欢
- 带你深度走入C语言取整以及4种函数 2022-09-17
- C语言编程C++旋转字符操作串示例详解 2022-11-20
- C语言实现宾馆管理系统课程设计 2023-03-13
- C++实战之二进制数据处理与封装 2023-05-29
- 全面了解C语言 static 关键字 2023-03-26
- [c语言-函数]不定量参数 2023-09-08
- C语言 详解字符串基础 2023-03-27
- C++实现ETW进行进程变动监控详解 2023-05-15
- centos 7 vscode cmake 编译c++工程 2023-09-17
- [C语言]二叉搜索树 2023-09-07