Umwandlung von boolescher Wert, der text in C++
Vielleicht ist das eine dumme Frage, aber gibt es eine Möglichkeit, zu konvertieren, die einen booleschen Wert zu einem string, so dass 1 schaltet auf "true" und 0 wird auf "false"? Ich konnte nur mithilfe einer if-Anweisung, aber es wäre schön zu wissen ob es eine Möglichkeit gibt, das zu tun, mit der Sprache oder standard-Bibliotheken. Plus, ich bin ein pedant. 🙂
InformationsquelleAutor der Frage Jason Baker | 2008-08-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie über die Verwendung der Sprache C++ selbst?
UPDATE:
Wenn Ihr mehr als 4 Zeilen code ohne Ausgabe in der Konsole, gehen Sie bitte zu cppreference.com's Seite reden über
std::boolalpha
undstd::noboolalpha
die Ihnen zeigt, die Ausgabe der Konsole und erklärt mehr über die API.Zusätzlich mit
std::boolalpha
wird, ändern Sie den globalen Zustandstd::cout
möchten Sie vielleicht, um die Wiederherstellung des ursprünglichen Verhalten gehen Sie hier für weitere Informationen über die Wiederherstellung der Zustand derstd::cout
.InformationsquelleAutor der Antwort graham.reeds
Wir reden hier über C++ richtig? Warum auf der Erde sind wir immer noch mit den Makros!?
C++ inline-Funktionen geben Sie die gleiche Geschwindigkeit wie ein makro, mit dem zusätzlichen Vorteil der Typ-Sicherheit und parameter Auswertung (das vermeidet das Problem, dass Rodney und dwj erwähnt.
Abgesehen davon, dass ich noch ein paar andere Beschwerden, insbesondere der akzeptierten Antwort 🙂
Prost 🙂
@DrPizza: eine ganze boost-lib für den Willen einer Funktion einfach? Sie haben wohl Witze?
InformationsquelleAutor der Antwort OJ.
C++ hat richtige Saiten, so dass Sie könnte genauso gut verwenden. Sie sind in der standard-header-string. #include <string> Sie zu nutzen. Nicht mehr strcat/strcpy Pufferüberläufe; nicht mehr fehlende null-terminatoren; nicht mehr chaotisch manuelles memory-management, die richtige gezählt, die Saiten mit dem richtigen Wert-Semantik.
C++ hat die Fähigkeit zur Konvertierung von bools in lesbare Darstellungen zu. Wir sahen Hinweise auf, die es früher mit den iostream-Beispiele, aber Sie sind ein bisschen beschränkt, weil Sie nur sprengen Sie die text auf der Konsole (oder mit fstreams, eine Datei). Zum Glück, die Entwickler von C++ nicht komplette Idioten; wir haben auch iostreams, die gesichert werden, nicht von der Konsole oder aus einer Datei, sondern von einer automatisch verwalteten string-Puffer. Sie heißen stringstreams. #include <sstream> um Sie zu bekommen. Dann können wir sagen:
Natürlich, wir wollen nicht wirklich zu geben. Glücklicherweise, C++ hat auch eine praktische Drittanbieter-Bibliothek namens Steigerndie uns helfen können, sich hier. Boost hat eine nette Funktion namens lexical_cast. Wir können es verwenden, also:
Nun, es ist wahr, zu sagen, dass diese höheren Aufwand als einige makro; stringstreams deal mit Gebietsschemas, die Sie nicht interessieren, und erstellen Sie einen dynamischen string (memory allocation) in der Erwägung, dass das makro kann Ertrag ein Zeichenfolgenliteral, das verhindert, dass. Aber auf der anderen Seite, die stringstream-Methode kann verwendet werden für eine Vielzahl von Konvertierungen zwischen druckbaren und internen Repräsentationen. Sie können laufen 'em rückwärts; boost::lexical_cast<bool>("true") das richtige tut, zum Beispiel. Sie können Sie mit zahlen und in der Tat, jede Art mit der rechten formatierte I/O-Operatoren. So sind Sie sehr vielseitig und nützlich.
Und wenn Sie nach all dies dein profiling und benchmarking zeigt, dass die lexical_casts sind inakzeptabel Engpass, das istwenn Sie sollten in Erwägung ziehen, einige makro-horror.
InformationsquelleAutor der Antwort DrPizza
Diese sollte in Ordnung sein:
Aber, wenn Sie wollen, es zu tun, mehr mit C++-ish:
InformationsquelleAutor der Antwort Shadow2531
Wenn Sie sich entscheiden, die Verwendung von Makros (oder mit C auf ein zukünftiges Projekt) sollten Sie Klammern um das 'b' in der makro-expansion (ich habe nicht genug Punkte noch Bearbeiten, anderen Menschen die Inhalte):
Dies ist ein defensive Programmierung Technik, die schützt vor versteckten order-of-operations-Fehler; also, wie funktioniert das bewerten für alle Compiler?
im Vergleich zu
InformationsquelleAutor der Antwort dwj
Benutze ich ein Diagramm in eine printf-so:
Wenn Sie makro :
dann müssen Sie sicherstellen, dass was auch immer Sie als
'b'
doesn ' T haben keine Nebenwirkungen. Und nicht zu vergessen die Klammern um die'b'
als Sie bekommen könnten Fehler bei der Kompilierung.InformationsquelleAutor der Antwort
Dieser Beitrag ist alt, aber jetzt können Sie
std::to_string
konvertieren eine Menge von Variablen, die alsstd::string
.http://en.cppreference.com/w/cpp/string/basic_string/to_string
InformationsquelleAutor der Antwort Erwan Guiomar
Verwenden
boolalpha
zu drucken, bool, string.C++ - Referenz
InformationsquelleAutor der Antwort UIResponder
Ich bin damit einverstanden, dass ein makro ist möglicherweise die beste Passform. Ich habe gerade steigerte sich zu einem Testfall (glauben Sie mir, ich bin nicht gut mit C/C++, aber das Klang lustig):
InformationsquelleAutor der Antwort Joseph Pecoraro
Solange strings können direkt eingesehen werden, als ein char-array, es wird wirklich schwer sein, mich davon zu überzeugen, dass
std::string
darstellt Zeichenfolgen als erste Klasse Bürger in C++.Außerdem die Kombination von Zuordnung und die Gebundenheit scheint eine schlechte Idee zu mir sowieso.
InformationsquelleAutor der Antwort Mat Noguchi
Versuchen, dieses Makro. Überall wo Sie wollen die "true" oder false " zu zeigen, nur ersetzen Sie es mit PRINTBOOL(var) where var bool-Sie wollen den text für.
InformationsquelleAutor der Antwort dagorym