C ++ wcstold () - Biblioteca estándar de C ++

La función wcstold () en C ++ interpreta el contenido de una cadena ancha como un número de punto flotante y devuelve su valor como un doble largo.

La función wcstold () también establece un puntero para apuntar al primer carácter ancho después del último carácter válido de la cadena ancha, si lo hay; de lo contrario, el puntero se establece en nulo.

Está definido en el archivo de encabezado.

prototipo wcstold ()

 wcstold doble largo (const wchar_t * str, wchar_t ** str_end);

La función wcstold () toma una cadena ancha y un puntero a un carácter ancho como parámetro, interpreta el contenido de la cadena ancha como un número de coma flotante y devuelve un valor doble largo.

Parámetros de wcstold ()

  • str: Una cadena ancha que tiene la representación de un número de punto flotante.
  • str_end: puntero a un puntero a un carácter ancho. El valor de str_end lo establece la función en el siguiente carácter de str después del último carácter válido. Este parámetro también puede ser un puntero nulo.

wcstold () Valor devuelto

La función wcstold () devuelve:

  • un valor doble largo (que se convierte de la cadena ancha).
  • 0.0 si no se pudo realizar una conversión válida.

Si el valor convertido está fuera del rango, se produce un error de rango y se devuelve un HUGE_VAL positivo o negativo .

Ejemplo 1: ¿Cómo funciona la función 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; )

Cuando ejecute el programa, la salida será:

 Cadena ancha = 93.410η ת Valor doble largo = 93.41 Cadena final = η ת

Ejemplo 2: función wcstold () sin caracteres finales

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

Cuando ejecute el programa, la salida será:

 Cadena ancha = 93.410 Valor doble largo = 93.41 Cadena final =

Un valor de punto flotante válido para la función wcstold () consta de un signo + o - opcional seguido de uno de los siguientes conjuntos:

  • Para el valor de coma flotante decimal :
    • Un grupo de dígitos decimales (0-9), que opcionalmente contiene un punto decimal (.). Por ejemplo: 13.170, -5.63, etc.
    • Una parte de exponente opcional (e o E) seguida de un signo + o - opcional y una secuencia no vacía de dígitos decimales. Por ejemplo: 3.46101e + 007, 13.19e-013, etc.
  • Para valor de coma flotante hexadecimal :
    • Una cadena que comienza con 0x o 0X, seguida de una secuencia no vacía de dígitos hexadecimales, que opcionalmente contiene un punto decimal (.). Por ejemplo: 0xfa5, -0xb1f.24, etc.
    • Una parte de exponente opcional (p o P) seguida de un signo + o - opcional y una secuencia no vacía de dígitos hexadecimales. Por ejemplo: 0x51c.23p5, -0x2a.3p-3, etc.
  • Infinito :
    • INF o INFINITY (ignorando el caso). Por ejemplo: -Inf, InfiNiTy, etc.
  • NaN (no es un número) :
    • Secuencia NAN o NAN (ignorando el caso) donde la secuencia es una secuencia de caracteres que consta solo de caracteres alfanuméricos o el guión bajo (_). El resultado es un NaN silencioso. Por ejemplo: Nan, NaNab1, etc.

Ejemplo 3: ¿Cómo funciona wcstold () con exponentes y hexadecimales?

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

Cuando ejecute el programa, la salida será:

 Cadena ancha = 34.901Æñ Valor doble largo = 34.901 Cadena final = Æñ Cadena ancha = 0Xfc1.a12χr12 Valor doble largo = 4033.63 Cadena final = χr12

Ejemplo 4: casos contados para INFINITY y 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; )

Cuando ejecute el programa, la salida será:

 Cadena ancha = inFinityxΣy Valor doble largo = inf Cadena final = xΣy Cadena ancha = NaN22Щ Valor doble largo = nan Cadena final = 22Щ

En general, un argumento de punto flotante válido para la función wcstold () tiene la siguiente forma:

 (espacio en blanco) (- | +) (dígitos) (. dígitos) ((e | E) (- | +) dígitos)

La función wcstold () ignora todos los caracteres de espacio en blanco iniciales hasta que se encuentra el carácter primario que no es de espacio en blanco.

Luego, a partir de este carácter, toma tantos caracteres como sea posible que forman una representación de punto flotante válida y los convierte en un valor de punto flotante. Lo que quede de la cadena después del último carácter válido se almacena en el objeto señalado por str_end.

Ejemplo 5: función wcstold () con espacios en blanco iniciales

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

Cuando ejecute el programa, la salida será:

 Cadena ancha = 59.013 कॵ Valor doble largo = 59.013 Cadena final = कॵ

Articulos interesantes...