2016-05-18 5 views
1

Ich versuche, das Ergebnis der Wahrheitstabelle in eine boolesche Anweisung zurück zu konvertieren. Für diejenigen, die nicht vertraut sind, werde ich es Detail schreiben.konvertieren Wahrheit Ergebnis in Boolean-Anweisung

Ich habe einen Vektor der Zeichenfolge in einem Format wie unten. Alle String-Mitglieder innerhalb des Vektors haben eine gleiche Länge. Mitglieder bestehen nur aus - oder 0 oder 1. zum Beispiel Vektor v enthalten 3 Mitglieder mit der Länge von 5 für jedes Mitglied.

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

Jedes Zeichen der Zeichenfolge stellt einen anderen Vektor "A" Mitglied zusammen mit einer booleschen Operation. Zum Beispiel

erste --1-0 ist (A[2] && !A[4])

würde Ich mag meinen obigen Vektor v umwandeln in

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

Was soll ich tun, um eine Funktion mit Vektoren v zu haben ist und A als Eingaben und die Rückgabe ist über Boolesche Aussage. Ich bin sicher, dass Sie bemerkt haben, dass 1 ist true, 0 ist Not true und - ist, egal Status.

EDIT: Ich habe nicht vor, eine Wahrheitstabelle oder Kmap zu lösen. Ich habe bereits das Ergebnis. Mein Ergebnis im Format "v" vector. Ich möchte eine Verbindung zwischen V und A mit Boolean-Anweisung erstellen.

Jeder Vorschlag wird geschätzt.

+2

Was das Ergebnis der Zeichenfolge „-----“ wahr oder falsch? –

+0

'-----' ist nichts. wenn es zusammenkommt, ist eine andere Zeichenfolge gleichzusetzen mit nichts. –

+0

[Karnaugh Karten] (https://en.wikipedia.org/wiki/Karnaugh_map) mit Zuständen {true, false, any} könnte im Allgemeinen interessant sein. –

Antwort

2

Ich vermute das Problem ist, dass ich nicht gut Englisch spreche, aber mir nicht klar ist, was genau Sie wollen.

Wenn Sie eine Funktion, die einen Vektor von std::string und einen Vektor von bool Rückkehr des bool Wert, nach Ihren Angaben gegeben wollen, dann ist es einfach zu tun (keine Fehler der Hoffnung).

Sie verwenden std::begin() so nehme ich C++ 11 ist gut für Sie

#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; 
} 
Verwandte Themen