首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将truthTable结果转换为布尔语句

将truthTable结果转换为布尔语句
EN

Stack Overflow用户
提问于 2016-05-18 11:05:21
回答 1查看 155关注 0票数 1

我试图将真值表的结果转换为布尔语句。对于那些不熟悉的人,我将把它写得更详细。

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

代码语言:javascript
复制
string vv[] = { "--1-0"  , "-1-1-" ,  "01-1-" };
std::vector<string> v(begin(vv), end(vv));

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

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

我想把上面的向量v转换成

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

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

编辑:我不打算解决truthTable或Kmap。我已经有结果了。我的结果是"v“向量的格式。我想使用布尔语句在V和A之间创建一个链接。

如有任何建议,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-18 13:56:11

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

如果您想要一个给定std::string向量和bool向量的函数返回bool值,根据您的指示,这样做很容易(希望没有出现错误)。

你使用std::begin(),所以我想C++11对你有好处

代码语言:javascript
复制
#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;
 }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37297738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档