C ++ wcstold () - Biblioteca standard C ++

Funcția wcstold () din C ++ interpretează conținutul unui șir larg ca un număr în virgulă mobilă și îi returnează valoarea ca un dublu lung.

Funcția wcstold () setează, de asemenea, un pointer pentru a indica primul caracter larg după ultimul caracter valid al șirului larg, dacă există, în caz contrar, indicatorul este setat la nul.

Este definit în fișierul antet.

wcstold () prototip

 wcstold dublu lung (const wchar_t * str, wchar_t ** str_end);

Funcția wcstold () ia ca parametru șirul larg și un pointer către caracterul larg, interpretează conținutul șirului larg ca un număr în virgulă mobilă și returnează o valoare dublă lungă.

wcstold () Parametri

  • str: Un șir larg având reprezentarea unui număr în virgulă mobilă.
  • str_end: Pointer către un pointer către un caracter larg. Valoarea str_end este setată de funcție la următorul caracter din str după ultimul caracter valid. Acest parametru poate fi, de asemenea, un indicator nul.

wcstold () Valoare returnată

Funcția wcstold () returnează:

  • o valoare dublă lungă (care este convertită din șirul larg).
  • 0,0 dacă nu s-a putut efectua o conversie validă.

Dacă valoarea convertită este în afara intervalului, apare o eroare de interval și se returnează un HUGE_VAL pozitiv sau negativ .

Exemplul 1: Cum funcționează funcția wcstold ()?

 #include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str() = L"93.410u03b7u05ea"; wchar_t *end; long double value; value = wcstold(str,&end); wcout << L"Wide String = " << str << endl; wcout << L"Long Double value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )

Când rulați programul, ieșirea va fi:

 Wide String = 93.410η ת Long Double value = 93.41 End String = η ת

Exemplul 2: funcția wcstold () fără caractere finale

 #include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str() = L"93.410"; wchar_t *end; long double value; value = wcstold(str,&end); wcout << L"Wide String = " << str << endl; wcout << L"Long Double value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )

Când rulați programul, ieșirea va fi:

 Wide String = 93.410 Long Double value = 93.41 End String =

O valoare validă în virgulă mobilă pentru funcția wcstold () constă dintr-un semn opțional + sau - urmat de unul dintre următoarele seturi:

  • Pentru valoarea zecimală în virgulă mobilă :
    • Un grup de cifre zecimale (0-9), care conține opțional un punct zecimal (.). De exemplu: 13.170, -5.63 etc.
    • O parte opțională a exponentului (e sau E) urmată de un semn opțional + sau - și o secvență non-goală de cifre zecimale. De exemplu: 3.46101e + 007, 13.19e-013 etc.
  • Pentru valoarea hexadecimală în virgulă mobilă :
    • Un șir care începe cu 0x sau 0X, urmat de o secvență non-goală de cifre hexazecimale, care conține opțional un punct zecimal (.). De exemplu: 0xfa5, -0xb1f.24 etc.
    • O parte a exponentului opțional (p sau P) urmată de un semn opțional + sau - și o secvență non-goală de cifre hexazecimale. De exemplu: 0x51c.23p5, -0x2a.3p-3 etc.
  • Infinit :
    • INF sau INFINITY (ignorând cazul). De exemplu: -Inf, InfiNiTy etc.
  • NaN (nu este un număr) :
    • Secvență NAN sau NAN (ignorând majuscule) în care secvența este o secvență de caractere constând numai din caractere alfanumerice sau subliniere (_). Rezultatul este un NaN liniștit. De exemplu: Nan, NaNab1 etc.

Exemplul 3: Cum funcționează wcstold () cu exponenți și hexadecimali?

 #include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str1() = L"34.901u00c6u00f1"; wchar_t str2() = L"0Xfc1.a12u03c7r12"; wchar_t *end; long double value; value = wcstold(str1,&end); wcout << L"Wide String = " << str1 << endl; wcout << L"Long Double value = " << value << endl; wcout << L"End String = " << end << endl; value = wcstold(str2,&end); wcout << L"Wide String = " << str2 << endl; wcout << L"Long Double value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )

Când rulați programul, ieșirea va fi:

 Wide String = 34.901Æñ Long Double value = 34.901 End String = Æñ Wide String = 0Xfc1.a12χr12 Long Double value = 4033.63 End String = χr12

Exemplul 4: wcstold cazuri pentru INFINITY și NaN

 #include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str1() = L"inFinityxu03a3y"; wchar_t str2() = L"NaN22u0429"; wchar_t *end; long double value; value = wcstold(str1,&end); wcout << L"Wide String = " << str1 << endl; wcout << L"Long Double value = " << value << endl; wcout << L"End String = " << end << endl; value = wcstold(str2,&end); wcout << L"Wide String = " << str2 << endl; wcout << L"Long Double value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )

Când rulați programul, ieșirea va fi:

 Wide String = inFinityxΣy Long Double value = inf End String = xΣy Wide String = NaN22Щ Long Double value = nan End String = 22Щ

În general, un argument valid în virgulă mobilă pentru funcția wcstold () are următoarea formă:

 (spațiu alb) (- | +) (cifre) (.cifre) ((e | E) (- | +) cifre)

Funcția wcstold () ignoră toate caracterele de spațiu alb principal până când se găsește caracterul primar non-spațiu.

Apoi, începând de la acest caracter, este nevoie de cât mai multe caractere care formează o reprezentare validă în virgulă mobilă și le convertește într-o valoare în virgulă mobilă. Orice a rămas din șir după ultimul caracter valid este stocat în obiectul indicat de str_end.

Exemplul 5: funcția wcstold () cu spațiul alb principal

 #include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str() = L" 59.013u0915u0975"; wchar_t *end; long double value; value = wcstold(str,&end); wcout << L"Wide String = " << str << endl; wcout << L"Long Double value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )

Când rulați programul, ieșirea va fi:

 Wide String = 59.013 value Long Double value = 59.013 End String = कॵ

Articole interesante...