std:: strxfrm
|
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) |
|
|
Documentación de C
para
strxfrm
|
|