C ++ strtod () - C ++ standaardbibliotheek

De functie strtod () in C ++ interpreteert de inhoud van een tekenreeks als een getal met drijvende komma en retourneert de waarde ervan als een dubbele.

Deze functie stelt ook een pointer zo in dat deze naar het eerste karakter wijst na het laatste geldige karakter van de string, als die er is, anders wordt de pointer op null gezet.

Voor basis 10 en de tekenreeks "12abc"

Geldig numeriek deel -> 12

Eerste teken na geldig numeriek deel -> a

Het wordt gedefinieerd in het header-bestand.

strtod () prototype

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

De functie strtod () neemt string en een pointer naar karakter als zijn parameter, interpreteert de inhoud van string als een floatgetal en retourneert een doublewaarde.

strtod () Parameters

  • str : een tekenreeks met de weergave van een getal met drijvende komma.
  • end : verwijzing naar een reeds toegewezen object van het type char *. De waarde van end wordt door de functie ingesteld op het volgende teken in str na het laatste geldige teken. Deze parameter kan ook een null-pointer zijn, in welk geval deze niet wordt gebruikt.

strtod () Retourwaarde

De functie strtod () retourneert:

  • een dubbele waarde (die wordt geconverteerd uit de string).
  • 0.0 als er geen geldige conversie kon worden uitgevoerd.

Als de geconverteerde waarde buiten het bereik valt, treedt een bereikfout op en wordt een positieve of negatieve HUGE_VAL geretourneerd.

Voorbeeld 1: Hoe werkt strtod () functie?

 #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; ) 

Wanneer u het programma uitvoert, is de uitvoer:

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

Voorbeeld 2: strtod () functie zonder volg tekens

 #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; ) 

Wanneer u het programma uitvoert, is de uitvoer:

 Getal in End String = 12.44b 0xy Getal in Double = 12.44 Null-pointer

Een geldige drijvende-kommawaarde voor de functie strtod () bestaat uit een optioneel + of - teken gevolgd door een van de volgende sets:

  • Voor decimale drijvende-kommawaarde :

    • Een groep decimale cijfers (0-9), eventueel met een decimale punt (.).
      Bijvoorbeeld: 13.170, -5.63, enz.

    • Een optioneel exponentdeel (e of E) gevolgd door een optioneel + of - teken en een niet-lege reeks decimale cijfers.
      Bijvoorbeeld: 3.46101e + 007, 13.19e-013, etc.

  • Voor hexadecimale drijvende-kommawaarde :

    • Een tekenreeks die begint met 0x of 0X, gevolgd door een niet-lege reeks hexadecimale cijfers, eventueel met een decimale punt (.).
      Bijvoorbeeld: 0xfa5, -0xb1f.24, etc.

    • Een optioneel exponentdeel (p of P) gevolgd door een optioneel + of - teken en niet-lege reeks hexadecimale cijfers.
      Bijvoorbeeld: 0x51c.23p5, -0x2a.3p-3, etc.

  • Oneindigheid :

    • INF of INFINITY (hoofdlettergebruik negerend).
      Bijvoorbeeld: -Inf, InfiNiTy, etc.

  • NaN (geen nummer) :

    • NAN of NANsequentie (waarbij hoofdletters / kleine letters worden genegeerd) waarbij sequentie een reeks tekens is die alleen uit alfanumerieke tekens of het onderstrepingsteken (_) bestaat. Het resultaat is een rustige NaN.
      Bijvoorbeeld: Nan, NaNab1, etc.

Voorbeeld 3: Hoe werkt strtod () met exponenten en hexadecimalen?

 #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; ) 

Wanneer u het programma uitvoert, is de uitvoer:

 Getal in String = -44.01e-3End String Number in Double = -0.04401 End String = End String Number in String = 0xf1bc.51hello Number in Double = 61884.3 End String = hallo

Voorbeeld 4: strtod Gevallen voor INFINITY en 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; ) 

Wanneer u het programma uitvoert, is de uitvoer:

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

Over het algemeen heeft een geldig drijvende-komma-argument voor de functie strtod () de volgende vorm:

(witruimte) (- | +) (cijfers) (.cijfers) ((e | E) (- | +) cijfers)

De functie strtod () negeert alle leidende witruimtetekens totdat het primaire niet-witruimteteken is gevonden.

Vervolgens, uitgaande van dit teken, zijn er zoveel mogelijk tekens nodig die een geldige drijvende-kommawaarde vormen en deze omzetten in een drijvende-kommawaarde. Wat er nog over is van de string na het laatste geldige teken, wordt opgeslagen in het object dat wordt aangeduid met het einde.

Voorbeeld 5: strtod () functie met voorloopspaties

 #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; ) 

Wanneer u het programma uitvoert, is de uitvoer:

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

Interessante artikelen...