C ++ strtod () - C ++ standarta bibliotēka

Funkcija strtod () C ++ interpretē virknes saturu kā peldošā komata skaitli un atgriež tās vērtību kā dubultu.

Šī funkcija arī norāda, ka rādītājs norāda uz pirmo rakstzīmi pēc pēdējās derīgās rakstzīmes, ja tādas ir, pretējā gadījumā rādītājs tiek iestatīts uz nulli.

10. bāzei un virknei "12abc"

Derīgā skaitliskā daļa -> 12

Pirmais simbols pēc derīgas skaitliskās daļas -> a

Tas ir definēts galvenes failā.

strtod () prototips

 dubultā strtod (const char * str, char ** end);

Funkcija strtod () kā parametru ņem virkni un rādītāju uz rakstzīmi, virknes saturu interpretē kā floatskaitli un atgriež doublevērtību.

strtod () parametri

  • str : virkne, kurā attēlots peldošā komata skaitlis.
  • end : Atsauce uz jau piešķirtu char * tipa objektu. Beigu vērtību funkcija nosaka nākamajai rakstzīmei str pēc pēdējās derīgās rakstzīmes. Šis parametrs var būt arī nulles rādītājs, tādā gadījumā tas netiek izmantots.

strtod () Atgriešanās vērtība

Funkcija strtod () atgriež:

  • dubultvērtība (kas tiek pārveidota no virknes).
  • 0.0, ja nevarēja veikt derīgu konversiju.

Ja konvertētā vērtība ir ārpus diapazona, rodas diapazona kļūda un tiek atgriezta pozitīva vai negatīva HUGE_VAL.

1. piemērs: Kā darbojas strtod () funkcija?

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

Palaidot programmu, izeja būs:

 Skaitlis beigu virknē = 12,44b 0xy Skaitlis divkāršā = 12,44 virkne = b 0xy

2. piemērs: funkcija strtod () bez rakstzīmēm

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

Palaidot programmu, izeja būs:

 Skaitlis beigu virknē = 12,44b 0xy Skaitlis divkāršā = 12,44 Null rādītājs

Funkcijai strtod () derīga peldošā komata vērtība sastāv no izvēles zīmes + vai -, kam seko viena no šīm kopām:

  • Decimāldaļas peldošā komata vērtībai :

    • Decimālzīmju grupa (0–9), pēc izvēles saturot decimālzīmi (.).
      Piemēram: 13.170, -5.63 utt.

    • Neobligāta eksponenta daļa (e vai E), kam seko papildu + vai - zīme un tukša decimālzīmju secība.
      Piemēram: 3.46101e + 007, 13.19e-013 utt.

  • Heksadecimālai peldošā komata vērtībai :

    • Virkne, kas sākas ar 0x vai 0X, kam seko tukša heksadecimālo ciparu secība, pēc izvēles saturot decimāldaļu (.).
      Piemēram: 0xfa5, -0xb1f.24 utt.

    • Neobligāta eksponenta daļa (p vai P), kam seko papildu + vai - zīme un tukša heksadecimālo ciparu secība.
      Piemēram: 0x51c.23p5, -0x2a.3p-3 utt.

  • Bezgalība :

    • INF vai INFINITY (ignorējot gadījumu).
      Piemēram: -Inf, InfiNiTy utt.

  • NaN (nav skaitlis) :

    • NAN vai NAN sekas (ignorējot reģistru), kur secība ir rakstzīmju secība, kas sastāv tikai no burtciparu rakstzīmēm vai pasvītrojuma (_). Rezultāts ir kluss NaN.
      Piemēram: Nan, NaNab1 utt.

3. piemērs: Kā strtod () darbojas ar eksponentiem un heksadecimāliem?

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

Palaidot programmu, izeja būs:

 Cipars virknē = -44.01e-3End virknes numurs divkāršā = -0.04401 beigu virkne = virknes beigu virkne = 0xf1bc.51 sveiki numurs divreiz = 61884.3 beigu virkne = sveiki

4. piemērs: strtod gadījumi INFINITY un 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; ) 

Palaidot programmu, izeja būs:

 INFINITY līdz Double = inf beigu virkne = Infabc līdz Double = inf gala virkne = abc NaN12a līdz Double = nan gala virkne = 12a

Kopumā derīgam strtod () funkcijas peldošā komata argumentam ir šāda forma:

(atstarpe) (- | +) (cipari) (. cipari) ((e | E) (- | +) cipari)

Funkcija strtod () ignorē visas vadošās atstarpes rakstzīmes, līdz tiek atrasts primārais raksturs, kas nav atstarpes.

Tad, sākot ar šo rakstzīmi, ir nepieciešams pēc iespējas vairāk rakstzīmju, kas veido derīgu peldošā komata attēlojumu un pārvērš tos par peldošā komata vērtību. Viss, kas paliek pāri no virknes pēc pēdējās derīgās rakstzīmes, tiek saglabāts objektā, uz kuru norāda beigas.

5. piemērs: funkcija strtod () ar vadošo atstarpi

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

Palaidot programmu, izeja būs:

 25,5 līdz dubultā = 25,5 beigu virkne = abc11,20 līdz dubultā = 0 gala virkne = abc11,20

Interesanti raksti...