Gibt es eine Alternative zu atof
, strtod
, lexical_cast
, stringstream
oder sprintf
?
das ist:
std::string
anstelle von char*
) Ich bevorzuge eher dies , eine einfache Funktion, optimiert und auf den Punkt
Grund:
atof
und strtod
ist C Funktion und sie geben nicht NaN
bei Fehler zurück, ich arbeite lieber an std::string
, also frage ich nur ob jemand bereits einen Wrapper in std::string
schreibt, den ich benutzen kann (wenn du nichts dagegen). lexical_cast
hat eine Boost-Abhängigkeit stringstream
ist langsam sprintf
hat ein Pufferüberlaufrisiko und seine C-Funktion Ich würde Boost Spirit betrachten
Immerhin erweisen sich die Benchmarks der Formatierer (also Float - & gt; string) durchweg als Top-of-the-Bill * 1 *
Auch die genaue Eingabeformatspezifikation und Semantik beim Parsen kann sehr gut mit einer Richtlinienklasse konfiguriert werden.
Hier ist meine absolute min-abhängige Verwendung von qi :: any_real_parser & lt; & gt; und die Liste der Abhängigkeiten, die es berührt:
%Vor%
- boost / Konzept
- boost / config
- boost / detail
- Boost / Ausnahme
- Boost / Fusion
- boost / iterator
- boost / math
- boost / mpl
- boost / optional
- Boost / Präprozessor
- boost / proto
- Verstärkung / Reichweite
- boost / regex
- boost / Geist
- boost / typeof
- boost / type_traits
- boost / Dienstprogramm
- Boost / Variante
aligned_storage.hpp, assert.hpp, blank_fwd.hpp, blank.hpp, call_traits.hpp, checked_delete.hpp, concept_check.hpp, config.hpp, cstdint.hpp, current_function.hpp, foreach_fwd.hpp, foreach.hpp , get_pointer.hpp, implicit_cast.hpp, iterator.hpp, limits.hpp, math_fwd.hpp, next_prior.hpp, nichtkopierbares.hpp, none.hpp, none_t.hpp, optionales.hpp, ref.hpp, static_assert.hpp, swap .hpp, throw_exception.hpp, type.hpp, Dienstprogramm.hpp, variant.hpp, version.hpp
1 z.B. Ссылка
Wenn Sie von numerischen Typen in std :: string konvertieren möchten, steht im neuesten Standard eine Funktion std::to_string
zur Verfügung.
Leider, wie ich kürzlich herausgefunden habe, ist es in Visual Studio 2010 etwas eingeschränkt, weil es nur drei Überladungen gibt; lang doppelt, lang lang und unsigniert lang lang. Dies führt zu Problemen, wenn Sie versuchen, sie in Vorlagen zu verwenden.
Die schnelle Format -Bibliothek sollte in der Lage sein, die Art von Transformationen zu machen, nach der Sie suchen, zumindest für das Schreiben eines Floats . Es behandelt jedoch nicht das Parsen eines Floats.
Tags und Links string c++ stl floating-point