std::strtof, std::strtod, std::strtold
| 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)
eoderEgefolgt von einem optionalen Minus- oder Pluszeichen und einer nichtleeren Sequenz von Dezimalziffern (definiert den Exponenten zur Basis 10)
|
(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) | |
| wandelt eine breite Zeichenkette in einen Fließkommawert um (Funktion) | |
| (C++17) |
konvertiert eine Zeichensequenz in einen Ganzzahl- oder Gleitkommawert (Funktion) |
| C-Dokumentation für strtof, strtod, strtold
| |