#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct Stack//结构体
{
int top;
double data[30];
};
double pop(struct Stack* S2)//弹出函数
{
--S2->top;
return S2->data[S2->top];
}
void push(struct Stack* A1, double z)//推进函数
{
A1->data[A1->top] = z;
++(A1->top);
}
int isNumber(char A)//判断是不是数字
{
int sub = A - '0';
if (sub >= 0 && sub <= 9)
{
return 1;
}
else
{
return 0;
}
}
void Backward(char* S, int n)//逆序
{
int i = 0;
int j = n - 1;
while (i != j)
{
S[i] = S[j];
i++;
j--;
}
}
int main()
{
struct Stack s1;
s1.top = 0;
char s2[30] = { 0 };
gets(s2);//先将前缀和表达式输入一个字符数组
int len = strlen(s2);//测量字符串长度
Backward(s2, len);//逆序
int i = 0;
int count = 0;
while (s2[i] != '\0')
{
if (s2[i] != NULL)//排除空格情况
{
char c = s2[i];
int back = isNumber(c);//判断是不是数字
if (back == 1)//数字入栈
{
double num = c - '0';
push(s1.data, num);
}
else//符号弹出运算、装入
{
if (s1.top < 2)
{
printf("ERROR");
return 0;
}
else
{
double a = pop(s1.data);
double b = pop(s1.data);
double re = 0;
if (c == '+')//运算
{
re = a + b;
}
else if (c == '-')
{
re = a - b;
}
else if (c == '*')
{
re = a * b;
}
else if (c == '/')
{
re = a / b;
}
push(s1.data, re);
}
}
}
}
printf("%.1lf", s1.data[s1.top]);
return 0;
}
![](https://profile-avatar.csdnimg.cn/49fae2375a954e499c07ff0d5a54c4bf_qq_74010202.jpg!4)
求前缀表达式,图片所示只是到那里出错,可能还有其他
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
悬赏问题
- ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
- ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂
- ¥15 数字信号处理考试111
- ¥100 关于#audobe audition#的问题,如何解决?
- ¥15 allegro17.2生成bom表是空白的
- ¥15 请问一下怎么打通CAN通讯
- ¥20 如何在 rocky9.4 部署 CDH6.3.2?
- ¥35 navicat将excel中的数据导入mysql出错
- ¥15 rt-thread线程切换的问题
- ¥15 高通uboot 打印ubi init err 22