1

真理値表の結果をブール ステートメントに変換しようとしています。よく知らない人のために詳しく書いておきます。

以下のような形式の文字列のベクトルがあります。ベクトル内のすべての文字列メンバーは同じ長さです。-メンバーは、または0またはのみで構成され1ます。たとえば、ベクトル v には、各メンバーの長さが 5 の 3 つのメンバーが含まれます。

string vv[] = { "--1-0"  , "-1-1-" ,  "01-1-" };
std::vector<string> v(begin(vv), end(vv));

string の各文字は、ブール演算とともに別のベクトル「A」メンバーを表します。例えば、

最初のもの--1-0(A[2] && !A[4])

v上記のベクトルをに変換したい

(A[2] && !A[4]) || (A[1] && A[3] ) || (!A[0] && A[1] && A[3])

私がやりたいのは、ベクトルvA入力として関数を持ち、戻り値がブールステートメントの上にあることです。1is true0is Not true、および-is don't care ステータスに気付いたと思います。

編集: TruthTable または Kmap を解決するつもりはありません。私はすでに結果を持っています。「v」ベクトルの形式での私の結果。ブールステートメントを使用して、V と A の間にリンクを作成したいと考えています。

どんな提案でも大歓迎です。

4

1 に答える 1

2

問題は、私が英語を上手に話せないことだと思いますが、あなたが正確に何を望んでいるのかわからないのです.

std::stringベクトルとベクトルを指定して値をbool返す関数が必要な場合はbool、指示に従って、簡単に実行できます(エラーが発生しないことを願っています)。

あなたが使っstd::begin()ているので、C++11 がいいと思います。

#include <vector>
#include <iostream>
#include <stdexcept>

bool singleStatement (const std::vector<bool>  & a,
                      const std::string        & s)
 {
   auto  ret = true;

   if ( a.size() < s.size() )
      throw std::runtime_error("invalid size");

   for ( unsigned  i = 0U ; i < s.size() ; ++i )
      switch ( s[i] )
       {
         case '-': break;
         case '1': ret &= a[i]; break;
         case '0': ret &= !a[i]; break;
         default:  throw std::runtime_error("invalid char"); break;
       }

   return ret;
 }

bool statements (const std::vector<bool>        & a,
                 const std::vector<std::string> & v)
 {
   auto  ret = false;

   for ( const auto & s : v )
      ret |= singleStatement(a, s);

   return ret;
 }


int main ()
 {
   std::vector<bool>         a { true, false, false, true, false };
   std::vector<std::string>  v { "--1-0"  , "-1-1-" ,  "01-1-" }; 

   std::cout << "statement is " << statements(a, v) << std::endl;

   return EXIT_SUCCESS;
 }
于 2016-05-18T13:56:11.400 に答える