Espacios de nombres
Variantes
Acciones

operator<<,>>(std::basic_string)

De cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
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,

               conststd::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 que os.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, ubica os.width()-str.size() copias del carácter os.fill() después de la secuencia de caracteres;
c) de lo contrario, ubica os.width()-str.size() copias del carácter os.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 N caracteres, donde N es is.width() si is.width() > 0, de lo contrario, N es str.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ácter c en is (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.

Contenido

[editar]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.

[editar]Parámetros

os - Un flujo de salida de caracteres.
is - Un flujo de entrada de caracteres.
str - La cadena a insertarse o extraerse.

[editar]Valor de retorno

1) os

2) is

[editar]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!
close