C++ 中前缀到中缀转换
在这个问题中,我们给定一个前缀表达式。我们的任务是打印给定表达式的中缀转换。
前缀表达式是操作符在操作数之前的表达式。
示例:+AB。
中缀表达式是操作符在操作数之间的表达式。
示例:A+B
中缀表达式是人类理解的信息,但是计算机对前缀或后缀表达式(通常为后缀)进行计算。
我们举个例子来理解这个问题
Input: prefix : /+LM/NX Output: infix : (L+M) / (N/X)
为了解决这个问题,我们将使用堆栈数据结构。我们将按相反的顺序遍历前缀表达式。并为表达式的每个元素检查这些情况。
如果元素是操作数 -> 将 (element) 入栈。
如果元素是操作符 -> 2Xpop(topofstack) 并按顺序入栈,作为字符串 = 操作数 - 操作符 - 操作数。
最后,遍历后,堆栈的顶部将包含一个字符串,该字符串是中缀转换,请打印它。
演示我们解决方案实现的程序
示例
#include <iostream>
#include <stack>
using namespace std;
bool isOperator(char element) {
switch (element) {
case '+':
case '-':
case '/':
case '*':
return true;
}
return false;
}
string convertToInfix(string prefix) {
stack<string> expression;
int length = prefix.size();
for (int i = length - 1; i >= 0; i--) {
if (isOperator(prefix[i])) {
string op1 = expression.top();
expression.pop();
string op2 = expression.top();
expression.pop();
string temp = "{"+op1+prefix[i]+op2+"}";
expression.push(temp);
} else {
expression.push(string(1, prefix[i]));
}
}
return expression.top();
}
int main() {
string prefix = "*-AB/+CD*XY";
cout<<"Prefix expression : "<<prefix<<endl;
cout<<"Infix expression : " <<convertToInfix(prefix);
return 0;
}输出
Prefix expression : *-AB/+CD*XY
Infix expression : {{A-B}*{{C+D}/{X*Y}}}
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP