Computer >> Máy Tính >  >> Lập trình >> C ++

Đánh giá một biểu thức boolean được biểu diễn dưới dạng chuỗi trong C ++

Trong bài toán này, chúng ta được cung cấp một chuỗi exp đại diện cho một biểu thức boolean. Nhiệm vụ của chúng tôi là đánh giá biểu thức boolean được biểu diễn dưới dạng Chuỗi.

Các ký tự hợp lệ trong biểu thức là -

0 hoặc 1 biểu thị giá trị boolean
&biểu thị AND hoạt động

| biểu thị hoạt động HOẶC
^ biểu thị hoạt động XOR

Chúng ta cần giải biểu thức này và trả về kết quả.

Hãy lấy một ví dụ để hiểu vấn đề,

Đầu vào: str =1 &1 | 0 ^ 1 ^ 0 &1

Đầu ra: 0

Giải thích:

1 &1 | 0 ^ 1 ^ 0 &1

1 VÀ 1 HOẶC 0 XOR 1 XOR 0 VÀ 1

1 HOẶC 0 XOR 1 XOR 0 VÀ 1
1 XOR 1 XOR 0 VÀ 1
0 XOR 0 VÀ 1
0 VÀ 1

0

Cách tiếp cận Giải pháp:


Một giải pháp đơn giản là kiểm tra các giá trị hiện tại và sau đó thực hiện từng thao tác một. Đối với điều này, chúng tôi sẽ xem xét 3-3 ký tự của chuỗi và sau đó trả về kết quả của chúng.

Chương trình minh họa hoạt động của giải pháp của chúng tôi,

Ví dụ

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

Đầu ra -

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