【问题标题】:convert truthTable result into Boolean statement将truthTable结果转换为布尔语句
【发布时间】:2016-05-18 11:05:21
【问题描述】:

我正在尝试将真值表的结果转换回布尔语句。 对于不熟悉的人,我将详细写它。

我有一个字符串向量,格式如下。向量内的所有字符串成员都具有相等的长度。成员仅由-01 组成。 例如向量 v 包含 3 个成员,每个成员的长度为 5。

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

字符串的每个字符代表另一个向量“A”成员以及一个布尔运算。例如,

第一个--1-0(A[2] &amp;&amp; !A[4])

我想将上面的矢量v 转换成

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

我想要做的是有一个以向量vA 作为输入的函数,并且返回高于布尔语句。我相信你已经注意到1true0Not true- 是不关心状态。

编辑:我不打算求解真值表或 Kmap。我已经有了结果。我的结果采用“v”向量的格式。我想使用布尔语句创建 V 和 A 之间的链接。

感谢任何建议。

【问题讨论】:

  • 字符串“-----”的结果是真是假?
  • '-----' 什么都不是。如果它出现在其他字符串上,则等于什么都不做联合。
  • Karnaugh maps 状态为 {true, false, any} 通常可能很有趣。
  • 您想要语句(作为代码字符串)还是使用布尔输入向量评估语句的结果?如果它说vv[] = { "-----" , "-----" , "-----" };,您仍然必须说出基本情况是什么然后您完全没有使用来自A的输入。您可以“取消定义它”(并说您不在乎返回结果是什么,所以实现可以是 true 或 false 方便),或者说它应该是一个错误,或者有一个特殊的“它既不是 true 也不是 false”返回结果(也许返回值本身与 10- 而不是真/假)。
  • @HostileFork 我想要评估语句的结果。我确定向量V里面没有“-----”,所以不需要关心特殊情况。

标签: c++ c++11 vector truthtable


【解决方案1】:

我想问题是我英语说得不好,但我不清楚你到底想要什么。

如果您想要一个函数,给定一个向量 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;
 }

【讨论】:

    猜你喜欢
    • 2011-12-10
    • 2011-03-13
    • 2022-01-26
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 2020-05-28
    • 1970-01-01
    相关资源
    最近更新 更多