Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

คำนำหน้าเพื่อการแปลง Infix ใน C ++


ในปัญหานี้ เราได้รับนิพจน์คำนำหน้า งานของเราคือพิมพ์การแปลง infix ของนิพจน์ที่กำหนด

นิพจน์คำนำหน้าคือนิพจน์ที่มีตัวดำเนินการอยู่หน้าตัวถูกดำเนินการ

ตัวอย่าง:+AB.

นิพจน์ Infix คือนิพจน์ที่มีตัวดำเนินการระหว่างตัวถูกดำเนินการ

ตัวอย่าง:A+B

นิพจน์ Infix เป็นข้อมูลเพื่อความเข้าใจของมนุษย์ แต่คอมพิวเตอร์ทำการคำนวณด้วยนิพจน์คำนำหน้าหรือคำนำหน้า (โดยทั่วไปคือ postfix)

มาดูตัวอย่างทำความเข้าใจปัญหากัน

Input: prefix : /+LM/NX
Output: infix : (L+M) / (N/X)

เพื่อแก้ปัญหานี้ เราจะใช้โครงสร้างข้อมูลสแต็ก เราจะสำรวจนิพจน์คำนำหน้าในลำดับที่กลับกันของนิพจน์ และสำหรับแต่ละองค์ประกอบของนิพจน์ ให้ตรวจสอบกรณีเหล่านี้

หากองค์ประกอบเป็นตัวถูกดำเนินการ -> ผลัก (องค์ประกอบ) ในสแต็ก

หากองค์ประกอบเป็นตัวดำเนินการ -> 2Xpop(topofstack) และกดตามลำดับเป็นสตริง =ตัวถูกดำเนินการ - ตัวดำเนินการ - ตัวถูกดำเนินการ

สุดท้าย หลังจากการข้ามผ่าน ส่วนบนของสแต็กจะมีสตริงซึ่งเป็นการแปลง infix พิมพ์ออกมา

โปรแกรมแสดงการใช้งานโซลูชันของเรา

ตัวอย่าง

#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}}}