Namespaces
Variants

std:: strxfrm

From cppreference.net
Definido en el encabezado <cstring>
std:: size_t strxfrm ( char * dest, const char * src, std:: size_t count ) ;

Transforma la cadena de bytes terminada en nulo apuntada por src a la forma definida por la implementación de manera que comparar dos cadenas transformadas con std::strcmp produce el mismo resultado que comparar las cadenas originales con std::strcoll , 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.

El comportamiento es indefinido si el dest array no es lo suficientemente grande. El comportamiento es indefinido si dest y src se superponen.

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 :: strxfrm ( nullptr, src, 0 ) .

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

Parámetros

dest - puntero al primer elemento del array donde se escribirá la cadena transformada
src - puntero al primer carácter de una cadena de bytes terminada en nulo a transformar
count - número máximo de caracteres a escribir

Valor de retorno

La longitud de la cadena transformada, sin incluir el carácter nulo terminador.

Ejemplo

#include <cassert>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <string>
int main()
{
    char* loc = std::setlocale(LC_COLLATE, "cs_CZ.iso88592");
    assert(loc);
    std::string in1 = "hrnec";
    std::string out1(1 + std::strxfrm(nullptr, in1.c_str(), 0), ' ');
    std::string in2 = "chrt";
    std::string out2(1 + std::strxfrm(nullptr, in2.c_str(), 0), ' ');
    std::strxfrm(&out1[0], in1.c_str(), out1.size());
    std::strxfrm(&out2[0], in2.c_str(), out2.size());
    std::cout << "In the Czech locale: ";
    if (out1 < out2)
        std::cout << in1 << " before " << in2 << '\n';
    else
        std::cout << in2 << " before " << in1 << '\n';
    std::cout << "In lexicographical comparison: ";
    if (in1 < in2)
        std::cout << in1 << " before " << in2 << '\n';
    else
        std::cout << in2 << " before " << in1 << '\n';
}

Salida posible:

In the Czech locale: hrnec before chrt
In lexicographical comparison: chrt before hrnec

Véase también

transforma una cadena ancha para que wcscmp produzca el mismo resultado que wcscoll
(función)
[virtual]
transforma una cadena para que la comparación pueda reemplazar a la intercalación
(función miembro protegida virtual de std::collate<CharT> )
compara dos cadenas de acuerdo con la configuración regional actual
(función)