Namensräume
Varianten
Aktionen

std::strtof, std::strtod, std::strtold

Von cppreference.com
< cpp‎ | string‎ | byte
 
 
 
 
Definiert in Header <cstdlib>
float       strtof ( const char* str, char** str_end );
(1) (seit C++11)
double      strtod ( const char* str, char** str_end );
(2)
long double strtold( const char* str, char** str_end );
(3) (seit C++11)

Interpretiert einen Gleitkommawert in einer Byte-Zeichenkette, auf die von str verwiesen wird.

Die Funktion verwirft beliebige Leerzeichen (wie von std::isspace bestimmt), bis das erste Nicht-Leerzeichen gefunden wird. Dann nimmt sie so viele Zeichen wie möglich, um eine gültige Gleitkommadarstellung zu bilden, und konvertiert sie in einen Gleitkommawert. Der gültige Gleitkommawert kann einer der folgenden sein:

  • Dezimale Gleitkomma-Ausdrücke. Sie bestehen aus den folgenden Teilen:
  • (optional) Vorzeichen (+ oder -)
  • Nichtleere Sequenz von Dezimalziffern, die optional ein Dezimaltrennzeichen enthält (wie von der aktuellen C Locale bestimmt) (definiert den Significand)
  • (optional) e oder E gefolgt von einem optionalen Minus- oder Pluszeichen und einer nichtleeren Sequenz von Dezimalziffern (definiert den Exponenten zur Basis 10)
  • Hexadezimale Gleitkomma-Ausdrücke. Sie bestehen aus den folgenden Teilen:
  • (optional) Vorzeichen (+ oder -)
  • 0x oder 0X
  • Nichtleere Sequenz von Hexadezimalziffern, die optional ein Dezimaltrennzeichen enthält (wie von der aktuellen C Locale bestimmt) (definiert den Significand)
  • (optional) p oder P gefolgt von einem optionalen Minus- oder Pluszeichen und einer nichtleeren Sequenz von Dezimalziffern (definiert den Exponenten zur Basis 2)
  • Unendlichkeits-Ausdrücke. Sie bestehen aus den folgenden Teilen:
  • (optional) Vorzeichen (+ oder -)
  • INF oder INFINITY (Groß-/Kleinschreibung wird ignoriert)
  • Nicht-eine-Zahl-Ausdrücke. Sie bestehen aus den folgenden Teilen:
  • (optional) Vorzeichen (+ oder -)
  • NAN oder NAN(char_sequence ) (Groß-/Kleinschreibung des Teils NAN wird ignoriert). char_sequence darf nur Ziffern, lateinische Buchstaben und Unterstriche enthalten. Das Ergebnis ist ein Quiet-NaN-Gleitkommawert.
(seit C++11)
  • Andere Ausdrücke, die von der aktuell installierten C Locale akzeptiert werden könnten.

Die Funktionen setzen den von str_end geführten Zeiger auf das Zeichen nach dem letzten interpretierten Zeichen. Wenn str_end ein Nullzeiger ist, wird er ignoriert.

Inhalt

[bearbeiten] Parameter

str - Zeiger auf die nullterminierte Byte-Zeichenkette, die interpretiert werden soll
str_end - Zeiger auf einen Zeiger auf ein Zeichen.

[bearbeiten] Rückgabewert

Gleitkommawert, der dem Inhalt von str bei Erfolg entspricht. Wenn der konvertierte Wert außerhalb des Bereichs des entsprechenden Rückgabetyps liegt, tritt ein Bereichsfehler auf und HUGE_VAL, HUGE_VALF oder HUGE_VALL wird zurückgegeben. Wenn keine Konvertierung durchgeführt werden kann, wird 0 zurückgegeben und *str_end auf str gesetzt.

[bearbeiten] Beispiel

#include <cerrno>
#include <clocale>
#include <cstdlib>
#include <iostream>
#include <string>
 
int main()
{
    const char* p = "111.11 -2.22 0X1.BC70A3D70A3D7P+6 -Inf 1.18973e+4932zzz";
    char* end{};
    std::cout << "Parsing \"" << p << "\":\n";
    errno = 0;
    for (double f = std::strtod(p, &end); p != end; f = std::strtod(p, &end))
    {
        std::cout << "  '" << std::string(p, end - p) << "' -> ";
        p = end;
        if (errno == ERANGE)
        {
            std::cout << "range error, got ";
            errno = 0;
        }
        std::cout << f << '\n';
    }
 
    if (std::setlocale(LC_NUMERIC, "de_DE.utf8"))
    {
        std::cout << "With de_DE.utf8 locale:\n";
        std::cout << "  '123.45' -> " << std::strtod("123.45", 0) << '\n';
        std::cout << "  '123,45' -> " << std::strtod("123,45", 0) << '\n';
    }
}

Mögliche Ausgabe

Parsing "111.11 -2.22 0X1.BC70A3D70A3D7P+6 -Inf 1.18973e+4932zzz":
  '111.11' -> 111.11
  ' -2.22' -> -2.22
  ' 0X1.BC70A3D70A3D7P+6' -> 111.11
  ' -Inf' -> -inf
  ' 1.18973e+4932' -> range error, got inf
With de_DE.utf8 locale:
  '123.45' -> 123
  '123,45' -> 123.45

[bearbeiten] Siehe auch

konvertiert einen Byte-String in einen Gleitkommawert
(Funktion) [bearbeiten]
wandelt eine breite Zeichenkette in einen Fließkommawert um
(Funktion) [bearbeiten]
konvertiert eine Zeichensequenz in einen Ganzzahl- oder Gleitkommawert
(Funktion) [bearbeiten]
C-Dokumentation für strtof, strtod, strtold