C ++ wcstold () - Biblioteca C ++ Padrão

A função wcstold () em C ++ interpreta o conteúdo de uma string larga como um número de ponto flutuante e retorna seu valor como um duplo longo.

A função wcstold () também define um ponteiro para apontar para o primeiro caractere largo após o último caractere válido da string larga, se houver algum, caso contrário, o ponteiro é definido como nulo.

É definido no arquivo de cabeçalho.

protótipo wcstold ()

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

A função wcstold () usa a string larga e um ponteiro para o caractere largo como parâmetro, interpreta o conteúdo da string larga como um número de ponto flutuante e retorna um valor duplo longo.

Parâmetros wcstold ()

  • str: Uma string larga com a representação de um número de ponto flutuante.
  • str_end: Ponteiro para um ponteiro para um caractere largo. O valor de str_end é definido pela função para o próximo caractere em str após o último caractere válido. Este parâmetro também pode ser um ponteiro nulo.

wcstold () Valor de retorno

A função wcstold () retorna:

  • um valor duplo longo (que é convertido da string larga).
  • 0,0 se nenhuma conversão válida puder ser realizada.

Se o valor convertido estiver fora do intervalo, ocorre um erro de intervalo e um HUGE_VAL positivo ou negativo é retornado.

Exemplo 1: Como funciona a função 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 você executa o programa, a saída será:

 String ampla = 93,410η ת Valor duplo longo = 93,41 String final = η ת

Exemplo 2: função wcstold () sem caracteres finais

 #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 você executa o programa, a saída será:

 String ampla = 93.410 Valor duplo longo = 93,41 String final =

Um valor de ponto flutuante válido para a função wcstold () consiste em um sinal opcional + ou - seguido por um dos seguintes conjuntos:

  • Para valor de ponto flutuante decimal :
    • Um grupo de dígitos decimais (0-9), contendo opcionalmente um ponto decimal (.). Por exemplo: 13,170, -5,63, etc.
    • Uma parte expoente opcional (e ou E) seguida por um sinal opcional + ou - e uma sequência não vazia de dígitos decimais. Por exemplo: 3.46101e + 007, 13.19e-013, etc.
  • Para valor de ponto flutuante hexadecimal :
    • Uma string começando com 0x ou 0X, seguida por uma sequência não vazia de dígitos hexadecimais, opcionalmente contendo um ponto decimal (.). Por exemplo: 0xfa5, -0xb1f.24, etc.
    • Uma parte expoente opcional (p ou P) seguida por um sinal opcional + ou - e uma sequência não vazia de dígitos hexadecimais. Por exemplo: 0x51c.23p5, -0x2a.3p-3, etc.
  • Infinito :
    • INF ou INFINITY (ignorando maiúsculas e minúsculas). Por exemplo: -Inf, InfiNiTy, etc.
  • NaN (não é um número) :
    • Seqüência NAN ou NAN (ignorando maiúsculas e minúsculas) em que seqüência é uma seqüência de caracteres que consiste apenas em caracteres alfanuméricos ou o sublinhado (_). O resultado é um NaN silencioso. Por exemplo: Nan, NaNab1, etc.

Exemplo 3: Como wcstold () funciona com expoentes e hexadecimais?

 #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 você executa o programa, a saída será:

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

Exemplo 4: casos wcstold para 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 você executa o programa, a saída será:

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

Em geral, um argumento de ponto flutuante válido para a função wcstold () tem o seguinte formato:

 (espaço em branco) (- | +) (dígitos) (. dígitos) ((e | E) (- | +) dígitos)

A função wcstold () ignora todos os caracteres de espaço em branco iniciais até que o caractere de espaço em branco principal seja encontrado.

Então, começando com este caractere, ele pega tantos caracteres quanto possíveis que formam uma representação de ponto flutuante válida e os converte em um valor de ponto flutuante. O que restar da string após o último caractere válido é armazenado no objeto apontado por str_end.

Exemplo 5: função wcstold () com espaço em branco à esquerda

 #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 você executa o programa, a saída será:

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

Artigos interessantes...