operator<<,>>(std::basic_string)
| Definido en el archivo de encabezado <string>
|
||
template <class CharT, class Traits, class Allocator> std::basic_ostream<CharT, Traits>& operator<<(std::basic_ostream<CharT, Traits>& os, const std::basic_string<CharT, Traits, Allocator>& str); |
(1) | |
template <class CharT, class Traits, class Allocator> std::basic_istream<CharT, Traits>& operator>>(std::basic_istream<CharT, Traits>& is, std::basic_string<CharT, Traits, Allocator>& str); |
(2) | |
1) Se comporta como una función de salida formateada, FormattedOutputFunction. Después de construir y comprobar el objeto centinela, determina el relleno del formato de salida de la siguiente manera:
- a) si
str.size()no es menor queos.width(), usa el rango[str.begin(), str.end())tal y como es; - b) de lo contrario, si
(os.flags() & ios_base::adjustfield) == ios_base::left, ubicaos.width()-str.size()copias del carácteros.fill()después de la secuencia de caracteres; - c) de lo contrario, ubica
os.width()-str.size()copias del carácteros.fill()antes de la secuencia de caracteres.
Luego almacena cada carácter de la secuencia resultante (el contenido de str más el relleno) al flujo de salida os, como si se llamara a os.rdbuf()->sputn(seq, n), donde n=std::max(os.width(), str.size()).
Finalmente, llama a os.width(0) para cancelar los efectos de std::setw, si es que los hubo.
2) Se comporta como una función de entrada formateada, FormattedOutputFunction. Después de construir y comprobar el objeto centinela, que puede saltarse espacios en blanco a la cabeza, primero borra str con str.erase(), luego lee caracteres de is y los añade a str como si fuera mediante str.append(1, c), hasta que una de las siguientes condiciones se vuelve verdadera:
- se leen
Ncaracteres, dondeNesis.width()siis.width() > 0, de lo contrario,Nesstr.max_size(); - ocurre la condición de fin de archivo en el flujo
is; std::isspace(c,is.getloc())es verdadero para el próximo caráctercenis(este carácter de espacio en blanco permanece en el flujo de entrada).
Si no se extraen caracteres, entonces std::ios::failbit se establece en is, que puede lanzar std::ios_base::failure.
Finalmente, llama a is.width(0) para cancelar los efectos de std::setw, si es que los hubo.
Excepciones
1) Puede lanzar std::ios_base::failure si se lanzó una excepción durante la salida.
2) Puede lanzar std::ios_base::failure si no se extrajeron caracteres de is (p. ej., el flujo se encuentra al final del archivo, o consiste de espacios en blanco solamente), o si se lanza una excepción durante la entrada.
Parámetros
| os | - | Un flujo de salida de caracteres. |
| is | - | Un flujo de entrada de caracteres. |
| str | - | La cadena a insertarse o extraerse. |
Valor de retorno
1) os
2) is
Ejemplo
#include <iostream>
#include <string>
#include <sstream>
int main()
{
std::string saludo = "Hola, crayola!";
std::istringstream is(saludo);
std::string hola_coma;
std::string crayola;
is >> hola_coma;
is >> crayola;
std::cout << saludo << '\n';
std::cout << hola_coma << '\n' << crayola << '\n';
}
Salida:
Hola, crayola!
Hola,
crayola!