C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++で文字列として表されるブール式を評価します


この問題では、ブール式を表す文字列expが与えられます。私たちのタスクは、文字列として表されるブール式を評価することです。

式の有効な文字は-

です。

ブール値を示す0または1
&AND操作を示す

| OR操作を示します
^XOR演算を示します

この式を解いて結果を返す必要があります。

問題を理解するために例を見てみましょう

入力: str =1&1 | 0 ^ 1 ^ 0&1

出力: 0

説明:

1&1 | 0 ^ 1 ^ 0&1

1 AND 1 OR 0 XOR 1 XOR 0 AND 1

1 OR 0 XOR 1 XOR 0 AND 1
1 XOR 1XOR0および1
0XOR0および1
0および1

0

ソリューションアプローチ:


簡単な解決策は、現在の値を確認してから、操作を1つずつ実行することです。このために、文字列の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

  1. C++で三項式を評価するプログラム

    三項式を保持する式があるとすると、式の結果を評価する必要があります。 TrueとFalseのTとF、および「?」などのいくつかの値をサポートします。および「:」文字。いくつかのプロパティがあります: 指定された文字列の長さは10000以下である必要があります。 条件式は右から左にグループ化します。 条件は常にTまたはFのいずれかになります。したがって、条件が数字になることはありません。 式の結果は常にTまたはFに評価されます。 たとえば、入力が「T? T? F:T:T」なので、出力はFになります。 これを解決するには、次の手順に従います。 ret:=空の文字列、n:=sのサイズ、

  2. Pythonの文字列からブール式を評価するプログラム?

    演算子「and」と「or」を含むブール式を含む文字列sがあるとします。それを評価して、結果を返します。ここでは、式に括弧が含まれている場合があります。これを最初に評価する必要があります。 したがって、入力がs =T and(F or T)のような場合、出力はTrueになります これを解決するには、次の手順に従います。 スタック:=新しいリスト t=空白で分割されたsの要素のリスト tのvごとに、実行します v[0]が(と同じ場合、 v [(のインデックスから終了]が Tと同じ場合、スタックにtrueをプッシュします それ以外の場合、「)」が見つかった