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

ประเมินนิพจน์บูลีนที่แสดงเป็นสตริงใน C++


ในปัญหานี้ เราได้รับสตริง exp ที่แสดงถึงนิพจน์บูลีน งานของเราคือการประเมินนิพจน์บูลีนที่แสดงเป็นสตริง

อักขระที่ถูกต้องในนิพจน์คือ −

0 หรือ 1 หมายถึงค่าบูลีน
&หมายถึง AND การดำเนินการ

| หมายถึง OR operation
^ หมายถึงการดำเนินการ XOR

เราจำเป็นต้องแก้นิพจน์นี้และส่งคืนผลลัพธ์

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

ป้อนข้อมูล: str =1&1|0^1^0&1

ผลลัพธ์: 0

คำอธิบาย:

1&1|0^1^0&1

1 และ 1 หรือ 0 XOR 1 XOR 0 และ 1

1 หรือ 0 XOR 1 XOR 0 และ 1
1 XOR 1 XOR 0 และ 1
0 XOR 0 และ 1
0 และ 1

0

แนวทางการแก้ปัญหา:


วิธีแก้ไขง่ายๆ คือ ตรวจสอบค่าปัจจุบันแล้วดำเนินการทีละรายการ สำหรับสิ่งนี้ เราจะพิจารณาอักขระ 3-3 ตัวของสตริงแล้วส่งคืนผลลัพธ์

โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา

ตัวอย่าง

#include <iostream>
using namespace std;

int andOperation(int a, int b){
   return a & b;
}

int orOperation(int a, int b){
   return a | b;
}

int xorOperation(int a, int b){
   return a^b;
}

char solveExpression(string s) {
   
   int n = s.length();

   for (int i = 0; i < n; i += 2) {

      if (s[i + 1] == '&') {
            s[i + 2] = andOperation(s[i], s[i + 2]);
      }
      else if (s[i + 1] == '+') {
            s[i + 2] = orOperation(s[i], s[i + 2]);
      }
      else {
            s[i + 2] = xorOperation(s[i], s[i + 2]);
      }
   }
   return s[n - 1] ;
}

int main() {
   
   string expr = "0^1+0+1&1";
   cout<<"The result of expression "<<expr<<" is "<<solveExpression(expr);
   return 0;
}

ผลลัพธ์ -

The result of expression 0^1+0+1&1 is 1