C ++ wcstof () - Libreria standard C ++

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

Questa funzione imposta anche un puntatore in modo che punti al primo carattere largo dopo l'ultimo carattere valido della stringa ampia, se presente, altrimenti il ​​puntatore viene impostato su null.

È definito nel file di intestazione.

prototipo wcstof ()

 float wcstof (const wchar_t * str, wchar_t ** str_end);

La funzione wcstof () accetta una stringa larga e un puntatore a un carattere ampio come parametro, interpreta il contenuto della stringa larga come un numero in virgola mobile e restituisce un valore float.

Parametri wcstof ()

  • 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.

wcstof () Restituisce il valore

La funzione wcstof () restituisce:

  • un valore float (che viene convertito dalla stringa ampia).
  • 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 wcstof ()?

 #include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str() = L"40.001u220fc12"; wchar_t *end; float value; value = wcstof(str,&end); wcout << L"Wide String = " << str << endl; wcout << L"Float value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )

Quando esegui il programma, l'output sarà:

 Stringa larga = 40.001∏c12 Valore virgola mobile = 40.001 Stringa finale = ∏c12

Esempio 2: funzione wcstof () senza caratteri finali

 #include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str() = L"791.513"; wchar_t *end; float value; value = wcstof(str,&end); wcout << L"Wide String = " << str << endl; wcout << L"Float value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )

Quando esegui il programma, l'output sarà:

 Stringa larga = 791,513 Valore virgola mobile = 791,513 Stringa finale =

Un valore a virgola mobile valido per la funzione wcstof () è 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 wcstof () con esponenti ed esadecimali?

 #include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str1() = L"39.119e+2xxu0a93"; wchar_t str2() = L"0Xf1.23cu00d8a1"; wchar_t *end; float value; value = wcstof(str1,&end); wcout << L"Wide String = " << str1 << endl; wcout << L"Float value = " << value << endl; wcout << L"End String = " << end << endl; value = wcstof(str2,&end); wcout << L"Wide String = " << str2 << endl; wcout << L"Float value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )

Quando esegui il programma, l'output sarà:

 Stringa larga = 39.119e + 2xx ઓ Valore virgola mobile = 3911.9 Stringa finale = xx ઓ Stringa larga = 0Xf1.23cØa1 Valore virgola mobile = 241.14 Stringa finale = Øa1

Esempio 4: casi wcstof 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"NaN11u0429"; wchar_t *end; float value; value = wcstof(str1,&end); wcout << L"Wide String = " << str1 << endl; wcout << L"Float value = " << value << endl; wcout << L"End String = " << end << endl; value = wcstof(str2,&end); wcout << L"Wide String = " << str2 << endl; wcout << L"Float value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )

Quando esegui il programma, l'output sarà:

 Wide String = -inFinityxΣy Float value = -inf End String = xΣy Wide String = NaN11Щ Float value = nan End String = 11Щ

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

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

La funzione wcstof () ignora tutti i caratteri di spazi bianchi iniziali fino a quando 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 wcstof () con spazi bianchi iniziali

 #include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wchar_t str() = L" 21.69u04f8aa"; wchar_t *end; float value; value = wcstof(str,&end); wcout << L"Wide String = " << str << endl; wcout << L"Float value = " << value << endl; wcout << L"End String = " << end << endl; return 0; )

Quando esegui il programma, l'output sarà:

 Stringa larga = 21,69Ӹaa Valore virgola mobile = 21,69 Stringa finale = Ӹaa

Articoli interessanti...