我试图将真值表的结果转换回布尔语句。对于那些不熟悉的人,我将详细介绍。
我有一个字符串向量,格式如下。向量内的所有字符串成员具有相等的长度。成员仅由-
或0
或组成1
。例如,向量v包含3个成员,每个成员的长度为5。
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])
我想做的是有一个带有向量的函数,v
并A
作为输入,返回值在布尔语句之上。我相信你已经注意到了,1
是true
,0
是Not true
和-
是不在乎的状态。
编辑:我不打算解决一个真理表或Kmap。我已经有结果了。我的结果采用“ v”向量的格式。我想使用布尔语句在V和A之间创建链接。
任何建议表示赞赏。
我想问题是我的英语说得不好,但我不清楚您到底想要什么。
如果需要给定向量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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句