Namespaces
Variants

std:: wcsxfrm

From cppreference.net
Definido en el encabezado <cwchar>
std:: size_t wcsxfrm ( wchar_t * dest, const wchar_t * src, std:: size_t count ) ;

Transforma la cadena ancha terminada en nulo apuntada por src a la forma definida por la implementación de manera que comparar dos cadenas transformadas con std::wcscmp produce el mismo resultado que comparar las cadenas originales con std::wcscoll , en la configuración regional C actual.

Los primeros count caracteres de la cadena transformada se escriben en el destino, incluyendo el carácter nulo terminador, y se devuelve la longitud de la cadena transformada completa, excluyendo el carácter nulo terminador.

Si count es 0 , entonces dest puede ser un puntero nulo.

Contenidos

Notas

La longitud correcta del búfer que puede recibir toda la cadena transformada es 1 + std :: wcsxfrm ( nullptr, src, 0 ) .

Esta función se utiliza cuando se realizan múltiples comparaciones dependientes de la configuración regional utilizando la misma cadena ancha o conjunto de cadenas anchas, porque es más eficiente usar std::wcsxfrm para transformar todas las cadenas una sola vez, y posteriormente comparar las cadenas anchas transformadas con std::wcscmp .

Parámetros

dest - puntero al primer elemento de una cadena ancha terminada en nulo donde escribir la cadena transformada
src - puntero a la cadena de caracteres anchos terminada en nulo que se va a transformar
count - número máximo de caracteres a generar

Valor de retorno

La longitud de la cadena ancha transformada, sin incluir el carácter nulo de terminación.

Ejemplo

#include <cwchar>
#include <iostream>
int main()
{
    std::setlocale(LC_ALL, "sv_SE.utf8");
    std::wstring in1 = L"\u00e5r";
    std::wstring out1(1 + std::wcsxfrm(nullptr, in1.c_str(), 0), L' ');
    std::wstring in2 = L"\u00e4ngel";
    std::wstring out2(1 + std::wcsxfrm(nullptr, in2.c_str(), 0), L' ');
    std::wcsxfrm(&out1[0], in1.c_str(), out1.size());
    std::wcsxfrm(&out2[0], in2.c_str(), out2.size());
    std::wcout << "In the Swedish locale: ";
    if (out1 < out2)
        std::wcout << in1 << " before " << in2 << '\n';
    else
        std::wcout << in2 << " before " << in1 << '\n';
    std::wcout << "In lexicographical comparison: ";
    if (in1 < in2)
        std::wcout << in1 << " before " << in2 << '\n';
    else
        std::wcout << in2 << " before " << in1 << '\n';
}

Salida:

In the Swedish locale: år before ängel
In lexicographical comparison: ängel before år

Véase también

transforma una cadena para que strcmp produzca el mismo resultado que strcoll
(función)
[virtual]
transforma una cadena para que la comparación pueda reemplazar la intercalación
(función miembro protegida virtual de std::collate<CharT> )
compara dos cadenas anchas de acuerdo con la configuración regional actual
(función)
Documentación C para wcsxfrm