C ++ strtod () - C ++ Standardbibliotek

Strtod () -funksjonen i C ++ tolker innholdet i en streng som et flytende nummer og returnerer verdien som en dobbel.

Denne funksjonen setter også en peker for å peke på det første tegnet etter strengens siste gyldige tegn hvis det er noen, ellers er pekeren satt til null.

For base 10 og strengen "12abc"

Gyldig numerisk del -> 12

Første tegn etter gyldig numerisk del -> a

Det er definert i topptekstfilen.

strtod () prototype

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

Strtod () -funksjonen tar streng og en peker til tegn som parameter, tolker innholdet i strengen som et floattall og returnerer en doubleverdi.

strtod () Parametere

  • str : En streng som har representasjon av et flytende nummer.
  • slutt : Henvisning til et allerede tildelt objekt av typen char *. Verdien på slutten settes av funksjonen til neste tegn i str etter det siste gyldige tegnet. Denne parameteren kan også være en nullpeker, i så fall brukes den ikke.

strtod () Returverdi

Funksjonen strtod () returnerer:

  • en dobbel verdi (som konverteres fra strengen).
  • 0.0 hvis ingen gyldig konvertering kunne utføres.

Hvis den konverterte verdien er utenfor området, oppstår en områdefeil og en positiv eller negativ HUGE_VAL returneres.

Eksempel 1: Hvordan fungerer strtod () -funksjonen?

 #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 kjører programmet, vil utdataene være:

 Antall i sluttstreng = 12.44b 0xy Nummer i dobbelt = 12.44 Streng = b 0xy

Eksempel 2: strtod () -funksjon uten etterfølgende tegn

 #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 kjører programmet, vil utdataene være:

 Antall i sluttstreng = 12.44b 0xy-nummer i dobbelt = 12.44 Nullpeker

En gyldig flytepunktverdi for strtod () -funksjonen består av et valgfritt + eller - tegn etterfulgt av ett av følgende sett:

  • For desimalverdi med flytende punkt :

    • En gruppe desimaltegn (0-9), som eventuelt inneholder et desimaltegn (.).
      For eksempel: 13.170, -5.63, etc.

    • En valgfri eksponentdel (e eller E) etterfulgt av et valgfritt + eller - tegn og ikke-tom sekvens med desimaltegn.
      For eksempel: 3.46101e + 007, 13.19e-013, etc.

  • For heksadesimal flytende verdi :

    • En streng som begynner med 0x eller 0X, etterfulgt av en ikke-tom sekvens av heksadesimale sifre, som eventuelt inneholder et desimaltegn (.).
      For eksempel: 0xfa5, -0xb1f.24, etc.

    • En valgfri eksponentdel (p eller P) etterfulgt av et valgfritt + eller - tegn og en ikke-sekvens med heksadesimale sifre.
      For eksempel: 0x51c.23p5, -0x2a.3p-3, etc.

  • Uendelig :

    • INF eller INFINITY (ignorerer sak).
      For eksempel: -Inf, InfiNiTy, etc.

  • NaN (ikke et tall) :

    • NAN eller NANsequence (ignorerer store og små bokstaver) der sekvensen er en sekvens av tegn som bare består av alfanumeriske tegn eller understrekningen (_). Resultatet er et stille NaN.
      For eksempel: Nan, NaNab1, etc.

Eksempel 3: Hvordan fungerer strtod () med eksponenter og heksadesimale tall?

 #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 kjører programmet, vil utdataene være:

 Antall i streng = -44.01e-3End strengnummer i dobbelt = -0.04401 Endestreng = Endstrengnummer i streng = 0xf1bc.51 hei nummer i dobbelt = 61884.3 Endstreng = hei

Eksempel 4: strtod-saker for INFINITY og 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 kjører programmet, vil utdataene være:

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

Generelt har et gyldig argument for flytende punkt for strtod () -funksjonen følgende form:

(mellomrom) (- | +) (sifre) (. sifre) ((e | E) (- | +) sifre)

Strtod () -funksjonen ignorerer alle de ledende mellomromstegnene til det primære ikke-hvite mellomromstegnet er funnet.

Fra dette tegnet tar det så mange tegn som mulig som danner en gyldig flytende representasjon og konverterer dem til en flytende verdi. Uansett hva som er igjen av strengen etter at det siste gyldige tegnet er lagret i objektet som er pekt av enden.

Eksempel 5: funksjonen strtod () med ledende mellomrom

 #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 kjører programmet, vil utdataene være:

 25,5 til dobbel = 25,5 sluttstreng = abc11.20 til dobbel = 0 sluttstreng = abc11.20

Interessante artikler...