C ++ wcstold () - Libreria standard C ++

La funzione wcstold () in C ++ interpreta il contenuto di una stringa ampia come un numero in virgola mobile e restituisce il suo valore come un double lungo.

La funzione wcstold () imposta anche un puntatore in modo che punti al primo carattere wide dopo l'ultimo carattere valido della stringa wide, se presente, altrimenti il ​​puntatore viene impostato su null.

È definito nel file di intestazione.

prototipo di wcstold ()

 long double wcstold (const wchar_t * str, wchar_t ** str_end);

La funzione wcstold () accetta una stringa larga e un puntatore a un carattere largo come parametro, interpreta il contenuto della stringa larga come un numero in virgola mobile e restituisce un valore double lungo.

Parametri wcstold ()

  • str: una stringa ampia con la rappresentazione di un numero in virgola mobile.
  • str_end: puntatore a un puntatore a un carattere largo. Il valore di str_end è impostato dalla funzione sul carattere successivo in str dopo l'ultimo carattere valido. Questo parametro può anche essere un puntatore nullo.

wcstold () Restituisce il valore

La funzione wcstold () restituisce:

  • un valore double lungo (che viene convertito dalla stringa wide).
  • 0.0 se non è stato possibile eseguire una conversione valida.

Se il valore convertito non rientra nell'intervallo, si verifica un errore di intervallo e viene restituito un valore HUGE_VAL positivo o negativo .

Esempio 1: come funziona la funzione 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; )

Quando esegui il programma, l'output sarà:

 Stringa larga = 93,410η ת Valore doppio lungo = 93,41 Stringa finale = η ת

Esempio 2: funzione wcstold () senza caratteri finali

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

Quando esegui il programma, l'output sarà:

 Stringa larga = 93,410 Valore doppio lungo = 93,41 Stringa finale =

Un valore a virgola mobile valido per la funzione wcstold () è costituito da un segno + o - opzionale seguito da uno dei seguenti insiemi:

  • Per il valore a virgola mobile decimale :
    • Un gruppo di cifre decimali (0-9), contenente facoltativamente un punto decimale (.). Ad esempio: 13.170, -5.63, ecc.
    • Una parte esponente facoltativa (e o E) seguita da un segno + o - facoltativo e da una sequenza non vuota di cifre decimali. Ad esempio: 3.46101e + 007, 13.19e-013, ecc.
  • Per il valore in virgola mobile esadecimale :
    • Una stringa che inizia con 0x o 0X, seguita da una sequenza non vuota di cifre esadecimali, contenente facoltativamente un punto decimale (.). Ad esempio: 0xfa5, -0xb1f.24, ecc.
    • Una parte esponente facoltativa (p o P) seguita da un segno + o - facoltativo e una sequenza non vuota di cifre esadecimali. Ad esempio: 0x51c.23p5, -0x2a.3p-3, ecc.
  • Infinito :
    • INF o INFINITY (ignorando maiuscole e minuscole). Ad esempio: -Inf, InfiNiTy, ecc.
  • NaN (non un numero) :
    • Sequenza NAN o NAN (ignorando maiuscole e minuscole) dove sequenza è una sequenza di caratteri composta solo da caratteri alfanumerici o dal trattino basso (_). Il risultato è un NaN silenzioso. Ad esempio: Nan, NaNab1, ecc.

Esempio 3: come funziona wcstold () con esponenti ed esadecimali?

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

Quando esegui il programma, l'output sarà:

 Stringa larga = 34,901Æñ Valore doppio lungo = 34,901 Stringa finale = Æñ Stringa larga = 0Xfc1.a12χr12 Valore doppio lungo = 4033,63 Stringa finale = χr12

Esempio 4: casi wcstold per INFINITY e 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; )

Quando esegui il programma, l'output sarà:

 Stringa larga = inFinityxΣy Valore doppio lungo = inf Stringa finale = xΣy Stringa larga = NaN22Щ Valore doppio lungo = nan Stringa finale = 22Щ

In generale, un argomento in virgola mobile valido per la funzione wcstold () ha la seguente forma:

 (spazi) (- | +) (cifre) (.digits) ((e | E) (- | +) cifre)

La funzione wcstold () ignora tutti i caratteri di spazio vuoto iniziali finché non viene trovato il carattere principale diverso da spazi.

Quindi, a partire da questo carattere, prende il maggior numero di caratteri possibile che forma una valida rappresentazione in virgola mobile e li converte in un valore in virgola mobile. Tutto ciò che resta della stringa dopo l'ultimo carattere valido viene memorizzato nell'oggetto indicato da str_end.

Esempio 5: funzione wcstold () con spazi bianchi iniziali

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

Quando esegui il programma, l'output sarà:

 Stringa larga = 59,013 कॵ Valore doppio lungo = 59,013 Stringa finale = कॵ

Articoli interessanti...