C ++ strtod () - C ++ Standardbibliothek

Die Funktion strtod () in C ++ interpretiert den Inhalt eines Strings als Gleitkommazahl und gibt seinen Wert als Double zurück.

Diese Funktion setzt auch einen Zeiger, der auf das erste Zeichen nach dem letzten gültigen Zeichen der Zeichenfolge zeigt, falls vorhanden, andernfalls wird der Zeiger auf null gesetzt.

Für Basis 10 und die Zeichenfolge "12abc"

Gültiger numerischer Teil -> 12

Erstes Zeichen nach gültigem numerischen Teil -> a

Es ist in der Header-Datei definiert.

strtod () Prototyp

 double strtod (const char * str, char ** end);

Die Funktion strtod () verwendet eine Zeichenfolge und einen Zeiger auf das Zeichen als Parameter, interpretiert den Inhalt der Zeichenfolge als floatZahl und gibt einen doubleWert zurück.

strtod () Parameter

  • str : Eine Zeichenfolge mit der Darstellung einer Gleitkommazahl.
  • end : Verweis auf ein bereits zugewiesenes Objekt vom Typ char *. Der Wert von end wird von der Funktion auf das nächste Zeichen in str nach dem letzten gültigen Zeichen gesetzt. Dieser Parameter kann auch ein Nullzeiger sein. In diesem Fall wird er nicht verwendet.

strtod () Rückgabewert

Die Funktion strtod () gibt Folgendes zurück:

  • ein doppelter Wert (der aus der Zeichenfolge konvertiert wird).
  • 0.0, wenn keine gültige Konvertierung durchgeführt werden konnte.

Wenn der konvertierte Wert außerhalb des Bereichs liegt, tritt ein Bereichsfehler auf und ein positiver oder negativer HUGE_VAL wird zurückgegeben.

Beispiel 1: Wie funktioniert die Funktion strtod ()?

 #include #include using namespace std; int main() ( char numberString() = "12.44b 0xy"; char *end; double number; number = strtod(numberString,&end); cout << "Number in String = " << numberString << endl; cout << "Number in Double = " << number << endl; cout << "End String = " << end << endl; return 0; ) 

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 Number in End String = 12.44b 0xy Number in Double = 12.44 String = b 0xy

Beispiel 2: Funktion strtod () ohne nachgestellte Zeichen

 #include #include using namespace std; int main() ( char numberString() = "12.44"; char *end; double number; number = strtod(numberString,&end); cout << "Number in String = " << numberString << endl; cout << "Number in Double = " << number << endl; // If end is not Null if (*end) ( cout << end; ) // If end is Null else ( cout << "Null pointer"; ) return 0; ) 

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 Number in End String = 12.44b 0xy Number in Double = 12.44 Nullzeiger

Ein gültiger Gleitkommawert für die Funktion strtod () besteht aus einem optionalen + oder - Vorzeichen, gefolgt von einer der folgenden Mengen:

  • Für dezimalen Gleitkommawert :

    • Eine Gruppe von Dezimalstellen (0-9), die optional einen Dezimalpunkt (.) Enthält.
      Zum Beispiel: 13.170, -5.63 usw.

    • Ein optionaler Exponententeil (e oder E), gefolgt von einem optionalen + oder - Vorzeichen und einer nicht leeren Folge von Dezimalstellen.
      Zum Beispiel: 3.46101e + 007, 13.19e-013 usw.

  • Für hexadezimalen Gleitkommawert :

    • Eine Zeichenfolge, die mit 0x oder 0X beginnt, gefolgt von einer nicht leeren Folge von hexadezimalen Ziffern, die optional einen Dezimalpunkt (.) Enthält.
      Zum Beispiel: 0xfa5, -0xb1f.24 usw.

    • Ein optionaler Exponententeil (p oder P), gefolgt von einem optionalen + oder - Vorzeichen und einer nicht leeren Folge von hexadezimalen Ziffern.
      Zum Beispiel: 0x51c.23p5, -0x2a.3p-3 usw.

  • Unendlichkeit :

    • INF oder INFINITY (Groß- / Kleinschreibung ignorieren).
      Zum Beispiel: -Inf, InfiNiTy usw.

  • NaN (keine Zahl) :

    • NAN oder NANsequence (Groß- und Kleinschreibung ignorieren), wobei die Sequenz eine Folge von Zeichen ist, die nur aus alphanumerischen Zeichen oder dem Unterstrich (_) besteht. Das Ergebnis ist ein leises NaN.
      Zum Beispiel: Nan, NaNab1 usw.

Beispiel 3: Wie funktioniert strtod () mit Exponenten und Hexadezimalen?

 #include #include #include using namespace std; int main() ( // initialize a exponential value char numberString() = "-44.01e-3End String"; char *end; double number; number = strtod(numberString,&end); cout << "Number in String = " << numberString << endl; cout << "Number in Double = " << number << endl; cout << "End String = " << end << endl << endl; // initialize a new hexadecimal value strcpy(numberString,"0xf1bc.51hello"); number = strtod(numberString,&end); cout << "Number in String = " << numberString << endl; cout << "Number in Double = " << number << endl; cout << "End String = " << end << endl; return 0; ) 

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 Nummer in String = -44.01e-3End String Nummer in Double = -0.04401 End String = End String Nummer in String = 0xf1bc.51hello Nummer in Double = 61884.3 End String = Hallo

Beispiel 4: Strtod-Fälle für INFINITY und NaN

 #include #include using namespace std; int main() ( char *end; cout << "INFINITY" << " to Double = " << strtod("INFINITY", &end) << endl; cout << "End String = " << end << endl << endl; cout << "Infabc" << " to Double = " << strtod("Infabc", &end) << endl; cout << "End String = " << end << endl << endl; cout << "NaN12a" << " to Double = " << strtod("NaN12a", &end) << endl; cout << "End String = " << end << endl << endl; return 0; ) 

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 INFINITY to Double = inf End String = Infabc to Double = inf End String = abc NaN12a to Double = nan End String = 12a

Im Allgemeinen hat ein gültiges Gleitkommaargument für die Funktion strtod () die folgende Form:

(Leerzeichen) (- | +) (Ziffern) (.Ziffern) ((e | E) (- | +) Ziffern)

Die Funktion strtod () ignoriert alle führenden Leerzeichen, bis das primäre Nicht-Leerzeichen gefunden wird.

Ausgehend von diesem Zeichen werden dann so viele Zeichen wie möglich verwendet, um eine gültige Gleitkommadarstellung zu bilden und diese in einen Gleitkommawert umzuwandeln. Was nach dem letzten gültigen Zeichen von der Zeichenfolge übrig bleibt, wird in dem Objekt gespeichert, auf das end zeigt.

Beispiel 5: strtod () -Funktion mit führendem Leerzeichen

 #include #include using namespace std; int main() ( char *end; cout << "25.5" << " to Double = " << strtod(" 25.5", &end) << endl; // end pointer is set to null cout << "End String = " << end << endl << endl; // Returns 0 because of invalid conversion cout << "abc11.20" << " to Double = " << strtod("abc11.20", &end) << endl; cout << "End String = " << end << endl << endl; return 0; ) 

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 25,5 bis Double = 25,5 End String = abc11.20 bis Double = 0 End String = abc11.20

Interessante Beiträge...