我试图将真值表的结果转换为布尔语句。对于那些不熟悉的人,我将把它写得更详细。
我有一个字符串向量,格式如下。向量中的所有字符串成员都具有相同的长度。成员仅由-、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,-是不关心状态的。
编辑:我不打算解决truthTable或Kmap。我已经有结果了。我的结果是"v“向量的格式。我想使用布尔语句在V和A之间创建一个链接。
如有任何建议,将不胜感激。
发布于 2016-05-18 13:56:11
我想问题是我英语说得不好,但我不清楚你到底想要什么。
如果您想要一个给定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;
}https://stackoverflow.com/questions/37297738
复制相似问题