C ++ strtod () - C ++ Standardbibliotek

Strtod () -funktionen i C ++ tolkar innehållet i en sträng som ett flytpunktsnummer och returnerar dess värde som en dubbel.

Den här funktionen ställer också in en pekare för att peka på det första tecknet efter det sista giltiga tecknet i strängen om det finns någon, annars är pekaren inställd på null.

För bas 10 och strängen "12abc"

Giltig numerisk del -> 12

Första tecknet efter giltig numerisk del -> a

Det definieras i rubrikfilen.

strtod () prototyp

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

Funktionen strtod () tar sträng och en pekare till tecken som parameter, tolkar strängens innehåll som ett floatnummer och returnerar ett doublevärde.

strtod () Parametrar

  • str : En sträng som representerar ett flytande nummer.
  • slut : Hänvisning till ett redan tilldelat objekt av typen char *. Värdet på slutet ställs in av funktionen till nästa tecken i str efter det sista giltiga tecknet. Denna parameter kan också vara en nollpekare, i vilket fall den inte används.

strtod () Returvärde

Funktionen strtod () returnerar:

  • ett dubbelvärde (som omvandlas från strängen).
  • 0.0 om ingen giltig konvertering kunde utföras.

Om det konverterade värdet ligger utanför intervallet inträffar ett intervallfel och ett positivt eller negativt HUGE_VAL returneras.

Exempel 1: Hur fungerar strtod () -funktionen?

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

När du kör programmet blir resultatet:

 Antal i slutsträng = 12.44b 0xy Nummer i dubbel = 12.44 Sträng = b 0xy

Exempel 2: strtod () -funktion utan efterföljande tecken

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

När du kör programmet blir resultatet:

 Antal i slutsträng = 12.44b 0xy-nummer i dubbel = 12.44 Nollpekare

Ett giltigt flytpunktsvärde för strtod () -funktionen består av ett valfritt + eller - tecken följt av en av följande uppsättningar:

  • För decimalt flytande punktvärde :

    • En grupp decimalsiffror (0-9), valfritt innehållande en decimalpunkt (.).
      Till exempel: 13.170, -5.63, etc.

    • En valfri exponentdel (e eller E) följt av ett valfritt + eller - tecken och icke-tom sekvens av decimalsiffror.
      Till exempel: 3.46101e + 007, 13.19e-013, etc.

  • För hexadecimalt flytpunkt :

    • En sträng som börjar med 0x eller 0X, följt av en icke-tom sekvens av hexadecimala siffror, som eventuellt innehåller en decimalpunkt (.).
      Till exempel: 0xfa5, -0xb1f.24, etc.

    • En valfri exponentdel (p eller P) följt av ett valfritt + eller - tecken och en icke-tom sekvens av hexadecimala siffror.
      Till exempel: 0x51c.23p5, -0x2a.3p-3, etc.

  • Oändlighet :

    • INF eller INFINITY (ignorerar fall).
      Till exempel: -Inf, InfiNiTy, etc.

  • NaN (inte ett nummer) :

    • NAN eller NAN-konsekvens (ignorerar skiftläge) där sekvensen är en sekvens av tecken som endast består av alfanumeriska tecken eller understrykningen (_). Resultatet är en tyst NaN.
      Till exempel: Nan, NaNab1, etc.

Exempel 3: Hur strtod () fungerar med exponenter och hexadecimaler?

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

När du kör programmet blir resultatet:

 Nummer i sträng = -44.01e-3End strängnummer i dubbel = -0.04401 slutsträng = slutsträngnummer i sträng = 0xf1bc.51 hej nummer i dubbel = 61884.3 slutsträng = hej

Exempel 4: strtod-fodral för INFINITY och 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; ) 

När du kör programmet blir resultatet:

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

I allmänhet har ett giltigt flytpunktsargument för strtod () -funktionen följande form:

(mellanslag) (- | +) (siffror) (. siffror) ((e | E) (- | +) siffror)

Strtod () -funktionen ignorerar alla de ledande blankstegsteckenen tills det primära icke-blankstegstecknet hittas.

Från och med denna karaktär tar det så många tecken som möjligt som bildar en giltig flytpunktsrepresentation och konverterar dem till ett flytpunktsvärde. Oavsett vad som är kvar av strängen efter det sista giltiga tecknet lagras i objektet som pekar på slutet.

Exempel 5: funktion strtod () med ledande blanksteg

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

När du kör programmet blir resultatet:

 25,5 till dubbel = 25,5 slutsträng = abc11.20 till dubbel = 0 slutsträng = abc11.20

Intressanta artiklar...