c - C中的后缀到中缀转换
问题描述
任何人都可以帮助我在 C 中进行 Postfix 到 Infix 的转换,我尝试了几次,但仍然无法弄清楚逻辑。
我知道算法,它类似于:
- 将表达式作为输入
- 如果 char 是操作数,则将其压入堆栈
- 如果 char 是运算符,则连续从堆栈中弹出两个元素,将运算符放在它们之间,然后将结果表达式压入堆栈
- 执行上述步骤,直到看不到整个表达式
#include<stdio.h>
char st[100];
int top = -1;
void push(char el)
{
st[++top] = el;
}
char pop()
{
return st[top--];
}
int isop(char val)
{
if (val == '+' || val == '-' || val == '*' || val == '/' || val == '%')
{
return 1;
} else {
return 0;
}
}
void main()
{
char exp[50], v1, v2, ex;
int i = 0;
printf("Enter the expression: ");
gets(exp);
while(exp[i] != '\0')
{
if(isop(exp[i]))
{
v1 = pop();
v2 = pop();
ex = exp[i];
} else {
push(exp[i]);
}
i++;
}
}
我唯一陷入困境的地方是,我将如何将结果表达式(通过将运算符放在两个弹出的操作数之间获得的表达式)再次推入堆栈。
谢谢。
解决方案
推荐阅读
- streamsets - Streamsets Transformer - 没有偏移列的 JDBC Origin
- c# - 通过用户模拟将用户添加到活动目录
- c# - 查找字符串中重复字符序列的有效方法
- google-cloud-platform - 如何使用 Google Cloud Storage 将文件夹目标设置到存储桶中?
- npgsql - PostgreSQL 和 Blazor .Net Core 3.1
- r - 如果行值为真,则折叠 R 中的变量
- jenkins - 如何在詹金斯蓝海 UI 中显示超链接?
- google-apps-script - 从 Google Aps 脚本中的文本输入字段捕获输入
- c# - Winforms应用程序中WebView2中WebBrowser.DocumentCompleted和WebBrowser.Navigating事件的等价性
- android - APK 扩展(OBB 文件)和 app Bundle 的区别