Estructura char_traits
La estructura char_traits describe los atributos asociados a un carácter.
Sintaxis
template <class CharType>
struct char_traits;
Parámetros
CharType
Tipo de datos del elemento.
Comentarios
La estructura de plantilla describe varios rasgos de caracteres del tipo CharType
. La plantilla de clase basic_string y varias plantillas de clase de iostream, incluida basic_ios, usan esta información para manipular elementos de tipo CharType
. Un tipo de elemento de este tipo no debe requerir ni una construcción ni una destrucción explícita. Debe proporcionar un constructor predeterminado, un constructor de copias y un operador de asignación, con la semántica esperada. Una copia bit a bit debe tener el mismo efecto que una asignación. Ninguna de las funciones miembro de la estructura char_traits puede iniciar excepciones.
Typedefs
Nombre de tipo | Descripción |
---|---|
char_type | Un tipo de carácter. |
int_type | Tipo entero que puede representar un carácter de tipo char_type o un carácter de final de archivo (EOF). |
off_type | Tipo entero que puede representar desplazamientos entre posiciones de una secuencia. |
pos_type | Tipo entero que puede representar posiciones de una secuencia. |
state_type | Tipo que representa el estado de conversión de caracteres multibyte de una secuencia. |
Funciones miembro
Función de miembro | Descripción |
---|---|
assign | Asigna un valor de carácter a otro. |
compare | Compara un número especificado de caracteres de dos cadenas. |
copy | Copia un número especificado de caracteres de una cadena a otra. Obsoleto. En su lugar, use char_traits::_Copy_s. |
_Copy_s | Copia un número especificado de caracteres de una cadena a otra. |
eof | Devuelve el carácter de final de archivo (EOF). |
eq | Comprueba si dos caracteres char_type son iguales. |
eq_int_type | Comprueba si dos caracteres que se representan como int_type son iguales. |
find | Busca la primera aparición de un carácter especificado en un intervalo de caracteres. |
length | Devuelve la longitud de una cadena. |
lt | Comprueba si un carácter es menor que otro. |
move | Copia un número especificado de caracteres de una secuencia en otra secuencia que puede que esté superpuesta. Obsoleto. En su lugar, use char_traits::_Move_s. |
_Move_s | Copia un número especificado de caracteres de una secuencia en otra secuencia que puede que esté superpuesta. |
not_eof | Comprueba si un carácter es el carácter de final de archivo (EOF). |
to_char_type | Convierte un carácter int_type en el carácter char_type correspondiente y devuelve el resultado. |
to_int_type | Convierte un carácter char_type en el carácter int_type correspondiente y devuelve el resultado. |
Requisitos
Encabezado:<string>
Espacio de nombres: std
char_traits::assign
Asigna un valor de carácter a otro o a un intervalo de elementos de una cadena.
static void assign(char_type& _CharTo,
const char_type& _CharFrom);
static char_type *assign(char_type* strTo,
size_t _Num,
char_type _CharFrom);
Parámetros
_ CharFrom El carácter cuyo valor se va a asignar.
_CharTo
El elemento al que se asignará el valor de carácter.
strTo
La matriz de cadenas o caracteres a cuyos elementos iniciales se les asignarán valores de caracteres.
_Num
El número de elementos a los que se van a asignar valores.
Valor devuelto
La segunda función miembro devuelve un puntero a la cadena a cuyos primeros elementos _Num se les han asignado valores de _CharFrom.
Ejemplo
// char_traits_assign.cpp
// compile with: /EHsc
#include <string>
#include <iostream>
int main( )
{
using namespace std;
// The first member function assigning
// one character value to another character
char ChTo = 't';
const char ChFrom = 'f';
cout << "The initial characters ( ChTo , ChFrom ) are: ( "
<< ChTo << " , " << ChFrom << " )." << endl;
char_traits<char>::assign ( ChTo , ChFrom );
cout << "After assigning, the characters ( ChTo , ChFrom ) are: ( "
<< ChTo << " , " << ChFrom << " )." << endl << endl;
// The second member function assigning
// character values to initial part of a string
char_traits<char>::char_type s1[] = "abcd-1234-abcd";
char_traits<char>::char_type* result1;
cout << "The target string s1 is: " << s1 << endl;
result1 = char_traits<char>::assign ( s1 , 4 , 'f' );
cout << "The result1 = assign ( s1 , 4 , 'f' ) is: "
<< result1 << endl;
}
The initial characters ( ChTo , ChFrom ) are: ( t , f ).
After assigning, the characters ( ChTo , ChFrom ) are: ( f , f ).
The target string s1 is: abcd-1234-abcd
The result1 = assign ( s1 , 4 , 'f' ) is: ffff-1234-abcd
char_traits::char_type
Un tipo de carácter.
typedef CharType char_type;
Comentarios
El tipo es un sinónimo del parámetro de plantilla CharType
.
Ejemplo
Vea el ejemplo de copy para obtener un ejemplo de cómo declarar y usar char_type
.
char_traits::compare
Compara un número especificado de caracteres de dos cadenas.
static int compare(const char_type* str1,
const char_type* str2,
size_t _Num);
Parámetros
str1
La primera de dos cadenas que se van a comparar entre sí.
str2
La segunda de dos cadenas que se van a comparar entre sí.
_Num
El número de elementos en las cadenas que se van a comparar.
Valor devuelto
Un valor negativo si la primera cadena es menor que la segunda cadena, 0 si las dos cadenas son iguales, o un valor positivo si la primera cadena es mayor que la segunda cadena.
Comentarios
La comparación entre las cadenas se realiza elemento por elemento, se comprueba primero la igualdad y después, si un par de elementos de la secuencia no son iguales, se comprueba cuál es menor.
Si dos cadenas son iguales en un intervalo pero una es mayor que la otra, entonces la más corta de las dos es menor que la más larga.
Ejemplo
// char_traits_compare.cpp
// compile with: /EHsc
#include <string>
#include <iostream>
int main() {
using namespace std;
char_traits<char>::char_type* s1 = "CAB";
char_traits<char>::char_type* s2 = "ABC";
char_traits<char>::char_type* s3 = "ABC";
char_traits<char>::char_type* s4 = "ABCD";
cout << "The string s1 is: " << s1 << endl;
cout << "The string s2 is: " << s2 << endl;
cout << "The string s3 is: " << s3 << endl;
cout << "The string s4 is: " << s4 << endl;
int comp1, comp2, comp3, comp4;
comp1 = char_traits<char>::compare ( s1 , s2 , 2 );
comp2 = char_traits<char>::compare ( s2 , s3 , 3 );
comp3 = char_traits<char>::compare ( s3 , s4 , 4 );
comp4 = char_traits<char>::compare ( s4 , s3 , 4 );
cout << "compare ( s1 , s2 , 2 ) = " << comp1 << endl;
cout << "compare ( s2 , s3 , 3 ) = " << comp2 << endl;
cout << "compare ( s3 , s4 , 4 ) = " << comp3 << endl;
cout << "compare ( s4 , s3 , 4 ) = " << comp4 << endl;
}
char_traits::copy
Copia un número especificado de caracteres de una cadena a otra.
Este método es potencialmente inseguro, ya que se basa en el llamador para comprobar que los valores pasados son correctos. Considere la opción de usar use char_traits::_Copy_s en su lugar.
static char_type *copy(char_type* _To,
const char_type* _From,
size_t _Num);
Parámetros
_To
El elemento situado al principio de la matriz de cadenas o caracteres destinada a recibir la secuencia de caracteres copiada.
_From
El elemento situado al principio de la matriz de cadenas o caracteres de origen que se va a copiar.
_Num
Número de elementos que se van a copiar.
Valor devuelto
El primer elemento copiado en la matriz de cadenas o caracteres destinada a recibir la secuencia de caracteres copiada.
Comentarios
Las secuencias de caracteres de origen y destino no deben superponerse.
Ejemplo
// char_traits_copy.cpp
// compile with: /EHsc /W3
#include <string>
#include <iostream>
int main( )
{
using namespace std;
char_traits<char>::char_type s1[] = "abcd-1234-abcd";
char_traits<char>::char_type s2[] = "ABCD-1234";
char_traits<char>::char_type* result1;
cout << "The source string is: " << s1 << endl;
cout << "The destination string is: " << s2 << endl;
// Note: char_traits::copy is potentially unsafe, consider
// using char_traits::_Copy_s instead.
result1 = char_traits<char>::copy ( s1 , s2 , 4 ); // C4996
cout << "The result1 = copy ( s1 , s2 , 4 ) is: "
<< result1 << endl;
}
The source string is: abcd-1234-abcd
The destination string is: ABCD-1234
The result1 = copy ( s1 , s2 , 4 ) is: ABCD-1234-abcd
char_traits::_Copy_s
Copia un número especificado de caracteres de una cadena a otra.
static char_type *_Copy_s(
char_type* dest,
size_t dest_size,
const char_type* _From,
size_t count);
Parámetros
dest
La matriz de cadenas o caracteres destinada a recibir la secuencia de caracteres copiada.
dest_size
Tamaño de dest. Si char_type
es char
, se muestra el tamaño en bytes. Si char_type
es wchar_t
, se muestra el tamaño en palabras.
_From
Matriz de cadenas o caracteres de origen que se va a copiar.
count
Número de elementos que se van a copiar.
Valor devuelto
La matriz de cadenas o caracteres destinada a recibir la secuencia de caracteres copiada.
Comentarios
Las secuencias de caracteres de origen y destino no deben superponerse.
Ejemplo
// char_traits__Copy_s.cpp
// compile with: /EHsc
#include <string>
#include <iostream>
int main( )
{
using namespace std;
char_traits<char>::char_type s1[] = "abcd-1234-abcd";
char_traits<char>::char_type s2[] = "ABCD-1234";
char_traits<char>::char_type* result1;
cout << "The source string is: " << s1 << endl;
cout << "The destination string is: " << s2 << endl;
result1 = char_traits<char>::_Copy_s(s1,
char_traits<char>::length(s1), s2, 4);
cout << "The result1 = _Copy_s(s1, "
<< "char_traits<char>::length(s1), s2, 4) is: "
<< result1 << endl;
}
The source string is: abcd-1234-abcd
The destination string is: ABCD-1234
The result1 = _Copy_s(s1, char_traits<char>::length(s1), s2, 4) is: ABCD-1234-abcd
char_traits::eof
Devuelve el carácter de final de archivo (EOF).
static int_type eof();
Valor devuelto
El carácter EOF.
Comentarios
Valor que representa el final del archivo (como EOF o WEOF).
El estándar de C++ indica que este valor no debe corresponder a un valor char_type
válido. El compilador de Microsoft C++ exige esta restricción para el tipo char
, pero no para el tipo wchar_t
. En el ejemplo siguiente se muestra esto.
Ejemplo
// char_traits_eof.cpp
// compile with: /EHsc
#include <string>
#include <iostream>
int main()
{
using namespace std;
char_traits<char>::char_type ch1 = 'x';
char_traits<char>::int_type int1;
int1 = char_traits<char>::to_int_type(ch1);
cout << "char_type ch1 is '" << ch1 << "' and corresponds to int_type "
<< int1 << "." << endl << endl;
char_traits<char>::int_type int2 = char_traits<char>::eof();
cout << "The eof marker for char_traits<char> is: " << int2 << endl;
char_traits<wchar_t>::int_type int3 = char_traits<wchar_t>::eof();
cout << "The eof marker for char_traits<wchar_t> is: " << int3 << endl;
}
char_type ch1 is 'x' and corresponds to int_type 120.
The eof marker for char_traits<char> is: -1
The eof marker for char_traits<wchar_t> is: 65535
char_traits::eq
Comprueba si dos caracteres char_type
son iguales.
static bool eq(const char_type& _Ch1, const char_type& _Ch2);
Parámetros
_Ch1
El primero de dos caracteres que se comprobará si son iguales.
_Ch2
El segundo de dos caracteres que se comprobará si son iguales.
Valor devuelto
true
si el primer carácter es igual al segundo carácter; en caso contrario, false
.
Ejemplo
// char_traits_eq.cpp
// compile with: /EHsc
#include <string>
#include <iostream>
int main( )
{
using namespace std;
char_traits<char>::char_type ch1 = 'x';
char_traits<char>::char_type ch2 = 'y';
char_traits<char>::char_type ch3 = 'x';
// Testing for equality
bool b1 = char_traits<char>::eq ( ch1 , ch2 );
if ( b1 )
cout << "The character ch1 is equal "
<< "to the character ch2." << endl;
else
cout << "The character ch1 is not equal "
<< "to the character ch2." << endl;
// An equivalent and alternatively test procedure
if ( ch1 == ch3 )
cout << "The character ch1 is equal "
<< "to the character ch3." << endl;
else
cout << "The character ch1 is not equal "
<< "to the character ch3." << endl;
}
The character ch1 is not equal to the character ch2.
The character ch1 is equal to the character ch3.
char_traits::eq_int_type
Comprueba si dos caracteres que se representan como int_type
s son iguales.
static bool eq_int_type(const int_type& _Ch1, const int_type& _Ch2);
Parámetros
_Ch1
El primero de los dos caracteres que se comprobará si son iguales como int_type
s.
_Ch2
El segundos de los dos caracteres que se comprobará si son iguales como int_type
s.
Valor devuelto
true
si el primer carácter es igual al segundo carácter; en caso contrario, false
.
Ejemplo
// char_traits_eq_int_type.cpp
// compile with: /EHsc
#include <string>
#include <iostream>
int main( )
{
using namespace std;
char_traits<char>::char_type ch1 = 'x';
char_traits<char>::char_type ch2 = 'y';
char_traits<char>::char_type ch3 = 'x';
// Converting from char_type to int_type
char_traits<char>::int_type int1, int2 , int3;
int1 =char_traits<char>:: to_int_type ( ch1 );
int2 =char_traits<char>:: to_int_type ( ch2 );
int3 =char_traits<char>:: to_int_type ( ch3 );
cout << "The char_types and corresponding int_types are:"
<< "\n ch1 = " << ch1 << " corresponding to int1 = "
<< int1 << "."
<< "\n ch2 = " << ch2 << " corresponding to int1 = "
<< int2 << "."
<< "\n ch3 = " << ch3 << " corresponding to int1 = "
<< int3 << "." << endl << endl;
// Testing for equality of int_type representations
bool b1 = char_traits<char>::eq_int_type ( int1 , int2 );
if ( b1 )
cout << "The int_type representation of character ch1\n "
<< "is equal to the int_type representation of ch2."
<< endl;
else
cout << "The int_type representation of character ch1\n is "
<< "not equal to the int_type representation of ch2."
<< endl;
// An equivalent and alternatively test procedure
if ( int1 == int3 )
cout << "The int_type representation of character ch1\n "
<< "is equal to the int_type representation of ch3."
<< endl;
else
cout << "The int_type representation of character ch1\n is "
<< "not equal to the int_type representation of ch3."
<< endl;
}
The char_types and corresponding int_types are:
ch1 = x corresponding to int1 = 120.
ch2 = y corresponding to int1 = 121.
ch3 = x corresponding to int1 = 120.
The int_type representation of character ch1
is not equal to the int_type representation of ch2.
The int_type representation of character ch1
is equal to the int_type representation of ch3.
char_traits::find
Busca la primera aparición de un carácter especificado en un intervalo de caracteres.
static const char_type* find(const char_type* str,
size_t _Num,
const char_type& _Ch);
Parámetros
str
El primer carácter de la cadena que se buscará.
_Num
El número de posiciones, contando desde el principio, del intervalo que se buscará.
_Ch
El carácter que se va a buscar en el intervalo.
Valor devuelto
Un puntero a la primera aparición del carácter especificado en el intervalo si se encuentra una coincidencia; de lo contrario, un puntero nulo.
Ejemplo
// char_traits_find.cpp
// compile with: /EHsc
#include <string>
#include <iostream>
int main( )
{
using namespace std;
const char* s1 = "f2d-1234-abcd";
const char* result1;
cout << "The string to be searched is: " << s1 << endl;
// Searching for a 'd' in the first 6 positions of string s1
result1 = char_traits<char>::find ( s1 , 6 , 'd');
cout << "The character searched for in s1 is: "
<< *result1 << endl;
cout << "The string beginning with the first occurrence\n "
<< "of the character 'd' is: " << result1 << endl;
// When no match is found the NULL value is returned
const char* result2;
result2 = char_traits<char>::find ( s1 , 3 , 'a');
if ( result2 == NULL )
cout << "The result2 of the search is NULL." << endl;
else
cout << "The result2 of the search is: " << result1
<< endl;
}
The string to be searched is: f2d-1234-abcd
The character searched for in s1 is: d
The string beginning with the first occurrence
of the character 'd' is: d-1234-abcd
The result2 of the search is NULL.
char_traits::int_type
Tipo entero que puede representar un carácter de tipo char_type
o un carácter de final de archivo (EOF).
typedef long int_type;
Comentarios
Debe ser posible convertir en tipo un valor de tipo CharType
a int_type
y, después, de nuevo a CharType
sin modificar el valor original.
Ejemplo
Vea el ejemplo de eq_int_type para obtener un ejemplo de cómo declarar y usar int_type
.
char_traits::length
Devuelve la longitud de una cadena.
static size_t length(const char_type* str);
Parámetros
str
La cadena de C cuya longitud se va a medir.
Valor devuelto
El número de elementos de la secuencia que se está midiendo, sin incluir el terminador nulo.
Ejemplo
// char_traits_length.cpp
// compile with: /EHsc
#include <string>
#include <iostream>
int main( )
{
using namespace std;
const char* str1= "Hello";
cout << "The C-string str1 is: " << str1 << endl;
size_t lenStr1;
lenStr1 = char_traits<char>::length ( str1 );
cout << "The length of C-string str1 is: "
<< lenStr1 << "." << endl;
}
The C-string str1 is: Hello
The length of C-string str1 is: 5.
char_traits::lt
Comprueba si un carácter es menor que otro.
static bool lt(const char_type& _Ch1, const char_type& _Ch2);
Parámetros
_Ch1
El primero de dos caracteres que se comprobará si son menores.
_Ch2
El segundo de dos caracteres que se comprobará si son menores.
Valor devuelto
true
si el primer carácter es menor que el segundo carácter; en caso contrario, false
.
Ejemplo
// char_traits_lt.cpp
// compile with: /EHsc
#include <string>
#include <iostream>
int main( )
{
using namespace std;
char_traits<char>::char_type ch1 = 'x';
char_traits<char>::char_type ch2 = 'y';
char_traits<char>::char_type ch3 = 'z';
// Testing for less than
bool b1 = char_traits<char>::lt ( ch1 , ch2 );
if ( b1 )
cout << "The character ch1 is less than "
<< "the character ch2." << endl;
else
cout << "The character ch1 is not less "
<< "than the character ch2." << endl;
// An equivalent and alternatively test procedure
if ( ch3 < ch2 )
cout << "The character ch3 is less than "
<< "the character ch2." << endl;
else
cout << "The character ch3 is not less "
<< "than the character ch2." << endl;
}
The character ch1 is less than the character ch2.
The character ch3 is not less than the character ch2.
char_traits::move
Copia un número especificado de caracteres de una secuencia en otra secuencia que puede que esté superpuesta.
Este método es potencialmente inseguro, ya que se basa en el llamador para comprobar que los valores pasados son correctos. Considere la opción de usar use char_traits::_Move_s en su lugar.
static char_type *move(char_type* _To,
const char_type* _From,
size_t _Num);
Parámetros
_To
El elemento situado al principio de la matriz de cadenas o caracteres destinada a recibir la secuencia de caracteres copiada.
_From
El elemento situado al principio de la matriz de cadenas o caracteres de origen que se va a copiar.
_Num
El número de elementos que se copiarán de la cadena de origen.
Valor devuelto
El primer elemento _To copiado en la matriz de cadenas o caracteres destinada a recibir la secuencia de caracteres copiada.
Comentarios
El origen y destino se pueden superponer.
Ejemplo
// char_traits_move.cpp
// compile with: /EHsc /W3
#include <string>
#include <iostream>
int main( )
{
using namespace std;
char_traits<char>::char_type sFrom1[] = "abcd-1234-abcd";
char_traits<char>::char_type sTo1[] = "ABCD-1234";
char_traits<char>::char_type* result1;
cout << "The source string sFrom1 is: " << sFrom1 << endl;
cout << "The destination stringsTo1 is: " << sTo1 << endl;
// Note: char_traits::move is potentially unsafe, consider
// using char_traits::_Move_s instead.
result1 = char_traits<char>::move ( sTo1 , sFrom1 , 4 ); // C4996
cout << "The result1 = move ( sTo1 , sFrom1 , 4 ) is: "
<< result1 << endl << endl;
// When source and destination overlap
char_traits<char>::char_type sToFrom2[] = "abcd-1234-ABCD";
char_traits<char>::char_type* result2;
cout << "The source/destination string sToFrom2 is: "
<< sToFrom2 << endl;
const char* findc = char_traits<char>::find ( sToFrom2 , 4 , 'c' );
// Note: char_traits::move is potentially unsafe, consider
// using char_traits::_Move_s instead.
result2 = char_traits<char>::move ( sToFrom2 , findc , 8 ); // C4996
cout << "The result2 = move ( sToFrom2 , findc , 8 ) is: "
<< result2 << endl;
}
The source string sFrom1 is: abcd-1234-abcd
The destination stringsTo1 is: ABCD-1234
The result1 = move ( sTo1 , sFrom1 , 4 ) is: abcd-1234
The source/destination string sToFrom2 is: abcd-1234-ABCD
The result2 = move ( sToFrom2 , findc , 8 ) is: cd-1234-4-ABCD
char_traits::_Move_s
Copia un número especificado de caracteres de una secuencia en otra secuencia que puede que esté superpuesta.
static char_type *_Move_s(
char_type* dest,
size_t dest_size,
const char_type* _From,
size_t count);
Parámetros
dest
El elemento situado al principio de la matriz de cadenas o caracteres destinada a recibir la secuencia de caracteres copiada.
dest_size
Tamaño de dest. Si char_type
es char
, está en bytes. Si char_type
es wchar_t
, está en palabras.
_From
El elemento situado al principio de la matriz de cadenas o caracteres de origen que se va a copiar.
count
El número de elementos que se copiarán de la cadena de origen.
Valor devuelto
El primer elemento dest copiado en la matriz de cadenas o caracteres destinada a recibir la secuencia de caracteres copiada.
Comentarios
El origen y destino se pueden superponer.
Ejemplo
// char_traits__Move_s.cpp
// compile with: /EHsc
#include <string>
#include <iostream>
int main( )
{
using namespace std;
char_traits<char>::char_type sFrom1[] = "abcd-1234-abcd";
char_traits<char>::char_type sTo1[] = "ABCD-1234";
char_traits<char>::char_type* result1;
cout << "The source string sFrom1 is: " << sFrom1 << endl;
cout << "The destination stringsTo1 is: " << sTo1 << endl;
result1 = char_traits<char>::_Move_s(sTo1,
char_traits<char>::length(sTo1), sFrom1, 4);
cout << "The result1 = _Move_s(sTo1, "
<< "char_traits<char>::length(sTo1), sFrom1, 4) is: "
<< result1 << endl << endl;
// When source and destination overlap
char_traits<char>::char_type sToFrom2[] = "abcd-1234-ABCD";
char_traits<char>::char_type* result2;
cout << "The source/destination string sToFrom2 is: "
<< sToFrom2 << endl;
const char* findc = char_traits<char>::find(sToFrom2, 4, 'c');
result2 = char_traits<char>::_Move_s(sToFrom2,
char_traits<char>::length(sToFrom2), findc, 8);
cout << "The result2 = _Move_s(sToFrom2, "
<< "char_traits<char>::length(sToFrom2), findc, 8) is: "
<< result2 << endl;
}
The source string sFrom1 is: abcd-1234-abcd
The destination stringsTo1 is: ABCD-1234
The result1 = _Move_s(sTo1, char_traits<char>::length(sTo1), sFrom1, 4) is: abcd-1234
The source/destination string sToFrom2 is: abcd-1234-ABCD
The result2 = _Move_s(sToFrom2, char_traits<char>::length(sToFrom2), findc, 8) is: cd-1234-4-ABCD
char_traits::not_eof
Comprueba si un carácter es o no es el carácter de final de archivo (EOF).
static int_type not_eof(const int_type& _Ch);
Parámetros
_Ch
El carácter representado como un int_type
que se va a probar si es o no es el carácter EOF.
Valor devuelto
La representación int_type
del carácter probado, si el elemento int_type
del carácter no es igual que el del carácter EOF.
Si el valor int_type
del carácter es igual al valor int_type
del EOF, es false
.
Ejemplo
// char_traits_not_eof.cpp
// compile with: /EHsc
#include <string>
#include <iostream>
int main( ) {
using namespace std;
char_traits<char>::char_type ch1 = 'x';
char_traits<char>::int_type int1;
int1 = char_traits<char>:: to_int_type ( ch1 );
cout << "The char_type ch1 is " << ch1
<< " corresponding to int_type: "
<< int1 << "." << endl;
// EOF member function
char_traits <char>::int_type int2 = char_traits<char>::eof ( );
cout << "The eofReturn is: " << int2 << endl;
// Testing for EOF or another character
char_traits <char>::int_type eofTest1, eofTest2;
eofTest1 = char_traits<char>::not_eof ( int1 );
if ( !eofTest1 )
cout << "The eofTest1 indicates ch1 is an EOF character."
<< endl;
else
cout << "The eofTest1 returns: " << eofTest1
<< ", which is the character: "
<< char_traits<char>::to_char_type ( eofTest1 )
<< "." << endl;
eofTest2 = char_traits<char>::not_eof ( int2 );
if ( !eofTest2 )
cout << "The eofTest2 indicates int2 is an EOF character."
<< endl;
else
cout << "The eofTest1 returns: " << eofTest2
<< ", which is the character: "
<< char_traits<char>::to_char_type ( eofTest2 )
<< "." << endl;
}
The char_type ch1 is x corresponding to int_type: 120.
The eofReturn is: -1
The eofTest1 returns: 120, which is the character: x.
The eofTest2 indicates int2 is an EOF character.
char_traits::off_type
Tipo entero que puede representar desplazamientos entre posiciones de una secuencia.
typedef streamoff off_type;
Comentarios
El tipo es un entero con signo que describe un objeto que puede almacenar un desplazamiento de bytes implicado en varias operaciones de posicionamiento de flujo. Normalmente, es un sinónimo de streamoff, pero tiene esencialmente las mismas propiedades que ese tipo.
char_traits::p os_type
Tipo entero que puede representar posiciones de una secuencia.
typedef streampos pos_type;
Comentarios
El tipo describe un objeto que puede almacenar toda la información necesaria para restaurar un indicador de posición de archivo arbitraria en un flujo. Normalmente, es un sinónimo de streampos, pero, en cualquier caso, tiene esencialmente las mismas propiedades que ese tipo.
char_traits::state_type
Tipo que representa el estado de conversión de caracteres multibyte de una secuencia.
typedef implementation-defined state_type;
Comentarios
El tipo describe un objeto que puede representar un estado de conversión. Normalmente, es un sinónimo de mbstate_t
pero, en cualquier caso, tiene esencialmente las mismas propiedades que ese tipo.
char_traits::to_char_type
Convierte un carácter int_type
en el carácter char_type
correspondiente y devuelve el resultado.
static char_type to_char_type(const int_type& _Ch);
Parámetros
_Ch
El carácter int_type
que se representará como un char_type
.
Valor devuelto
El carácter char_type
correspondiente al carácter int_type
.
Un valor de _Ch que no se puede representar como tal produce un resultado no especificado.
Comentarios
Las operaciones de conversión to_int_type y to_char_type
son inversas entre sí, por lo que:
to_int_type
( to_char_type
( x ) ) == x
para cualquier int_type
x y
to_char_type
( to_int_type
( x ) ) == x
para cualquier char_type
x.
Ejemplo
// char_traits_to_char_type.cpp
// compile with: /EHsc
#include <string>
#include <iostream>
int main( )
{
using namespace std;
char_traits<char>::char_type ch1 = 'a';
char_traits<char>::char_type ch2 = 'b';
char_traits<char>::char_type ch3 = 'a';
// Converting from char_type to int_type
char_traits<char>::int_type int1, int2 , int3;
int1 =char_traits<char>:: to_int_type ( ch1 );
int2 =char_traits<char>:: to_int_type ( ch2 );
int3 =char_traits<char>:: to_int_type ( ch3 );
cout << "The char_types and corresponding int_types are:"
<< "\n ch1 = " << ch1 << " corresponding to int1 = "
<< int1 << "."
<< "\n ch2 = " << ch2 << " corresponding to int1 = "
<< int2 << "."
<< "\n ch3 = " << ch3 << " corresponding to int1 = "
<< int3 << "." << endl << endl;
// Converting from int_type back to char_type
char_traits<char>::char_type rec_ch1;
rec_ch1 = char_traits<char>:: to_char_type ( int1);
char_traits<char>::char_type rec_ch2;
rec_ch2 = char_traits<char>:: to_char_type ( int2);
cout << "The recovered char_types and corresponding int_types are:"
<< "\n recovered ch1 = " << rec_ch1 << " from int1 = "
<< int1 << "."
<< "\n recovered ch2 = " << rec_ch2 << " from int2 = "
<< int2 << "." << endl << endl;
// Testing that the conversions are inverse operations
bool b1 = char_traits<char>::eq ( rec_ch1 , ch1 );
if ( b1 )
cout << "The recovered char_type of ch1"
<< " is equal to the original ch1." << endl;
else
cout << "The recovered char_type of ch1"
<< " is not equal to the original ch1." << endl;
// An equivalent and alternatively test procedure
if ( rec_ch2 == ch2 )
cout << "The recovered char_type of ch2"
<< " is equal to the original ch2." << endl;
else
cout << "The recovered char_type of ch2"
<< " is not equal to the original ch2." << endl;
}
The char_types and corresponding int_types are:
ch1 = a corresponding to int1 = 97.
ch2 = b corresponding to int1 = 98.
ch3 = a corresponding to int1 = 97.
The recovered char_types and corresponding int_types are:
recovered ch1 = a from int1 = 97.
recovered ch2 = b from int2 = 98.
The recovered char_type of ch1 is equal to the original ch1.
The recovered char_type of ch2 is equal to the original ch2.
char_traits::to_int_type
Convierte un carácter char_type
en el carácter int_type
correspondiente y devuelve el resultado.
static int_type to_int_type(const char_type& _Ch);
Parámetros
_Ch
El carácter char_type
que se representará como un int_type
.
Valor devuelto
El carácter int_type
correspondiente al carácter char_type
.
Comentarios
Las operaciones de conversión to_int_type
y to_char_type son inversas entre sí, por lo que:
to_int_type
( to_char_type
( x ) ) == x
para cualquier int_type
x y
to_char_type
( to_int_type
( x ) ) == x
para cualquier char_type
x.
Ejemplo
// char_traits_to_int_type.cpp
// compile with: /EHsc
#include <string>
#include <iostream>
int main( )
{
using namespace std;
char_traits<char>::char_type ch1 = 'a';
char_traits<char>::char_type ch2 = 'b';
char_traits<char>::char_type ch3 = 'a';
// Converting from char_type to int_type
char_traits<char>::int_type int1, int2 , int3;
int1 =char_traits<char>:: to_int_type ( ch1 );
int2 =char_traits<char>:: to_int_type ( ch2 );
int3 =char_traits<char>:: to_int_type ( ch3 );
cout << "The char_types and corresponding int_types are:"
<< "\n ch1 = " << ch1 << " corresponding to int1 = "
<< int1 << "."
<< "\n ch2 = " << ch2 << " corresponding to int1 = "
<< int2 << "."
<< "\n ch3 = " << ch3 << " corresponding to int1 = "
<< int3 << "." << endl << endl;
// Converting from int_type back to char_type
char_traits<char>::char_type rec_ch1;
rec_ch1 = char_traits<char>:: to_char_type ( int1);
char_traits<char>::char_type rec_ch2;
rec_ch2 = char_traits<char>:: to_char_type ( int2);
cout << "The recovered char_types and corresponding int_types are:"
<< "\n recovered ch1 = " << rec_ch1 << " from int1 = "
<< int1 << "."
<< "\n recovered ch2 = " << rec_ch2 << " from int2 = "
<< int2 << "." << endl << endl;
// Testing that the conversions are inverse operations
bool b1 = char_traits<char>::eq ( rec_ch1 , ch1 );
if ( b1 )
cout << "The recovered char_type of ch1"
<< " is equal to the original ch1." << endl;
else
cout << "The recovered char_type of ch1"
<< " is not equal to the original ch1." << endl;
// An equivalent and alternatively test procedure
if ( rec_ch2 == ch2 )
cout << "The recovered char_type of ch2"
<< " is equal to the original ch2." << endl;
else
cout << "The recovered char_type of ch2"
<< " is not equal to the original ch2." << endl;
}
The char_types and corresponding int_types are:
ch1 = a corresponding to int1 = 97.
ch2 = b corresponding to int1 = 98.
ch3 = a corresponding to int1 = 97.
The recovered char_types and corresponding int_types are:
recovered ch1 = a from int1 = 97.
recovered ch2 = b from int2 = 98.
The recovered char_type of ch1 is equal to the original ch1.
The recovered char_type of ch2 is equal to the original ch2.