std::quoted
Definido en el archivo de encabezado <iomanip> | ||
template<class CharT > /*no especificado*/ quoted(const CharT* s, | (1) | (desde C++14) |
template<class CharT, class Traits, class Allocator > /*no especificado*/ quoted(conststd::basic_string<CharT, Traits, Allocator>& s, | (2) | (desde C++14) |
template<class CharT, class Traits> /*no especificado*/ quoted(std::basic_string_view<CharT, Traits> s, | (3) | (desde C++17) |
template<class CharT, class Traits, class Allocator > /*no especificado*/ quoted(std::basic_string<CharT, Traits, Allocator>& s, | (4) | (desde C++14) |
Permite la inserción y extracción de cadenas entre comillas, como las que se encuentran en CSV o XML.
Cuando se utiliza en una expresión out << quoted(s, delim, escape), donde out
es un flujo de salida con char_type
igual a CharT
y, para las sobrecargas 2-4, traits_type
igual a Traits
, se comporta como una FormattedOutputFunction, que inserta en out una secuencia de caracteres seq
construida de la siguiente manera:
delim
se agrega a la secuencia.s
, excepto si el próximo carácter a generar en la salida es igual al delimitador delim
o es igual a la secuencia de escape escape
(como se determina por el rasgo de tipo traits_type::eq
del flujo), entonces primero añade una copia extra de escape
.delim
se añade a seq
una vez más.Entonces, si seq.size() < out.width()
, agrega out.width()-seq.size()
copias del carácter de relleno out.fill()
ya sea al final de la secuencia (si ios_base::left
está establecido en out.flags()
) o al principio de la secuencia (en el resto de los casos).
Finalmente, genera salida para cada carácter de la secuencia resultante como si se llamara a out.rdbuf()->sputn(seq, n), donde n=std::max(out.width(), seq.size()) y out.width(0) para cancelar los efectos de std::setw, si los hay.
in
es un flujo de entrada con char_type
igual a CharT
y traits_type
igual a Traits
, extrae caracteres de in, usando std::basic_istream::operator>>, de acuerdo a las siguientes reglas:delim
(como se determina por el rasgo de tipo traits_type::eq
del flujo), entonces simplemente ejecuta in >> s.in
y los añade a s
, excepto que cuando se extraiga un carácter escape
, se ignora y el próximo carácter se añade a s
. La extracción se detiene cuando !in==true o cuando se encuentra un carácter delim
sin el carácter de escape.delim
.Contenido |
[editar]Parámetros
s | - | La cadena a insertar o extraer. |
delim | - | El carácter a utilizar como el delimitador; " por defecto. |
escape | - | El carácter a utilizar como el carácter de escape; \ por defecto. |
[editar]Valor de retorno
Devuelve un objeto de un tipo no especificado tal que el comportamiento descrito toma lugar.
[editar]Excepciones
Lanza std::ios_base::failure si el operador operator>> o el operador operator<< lanzan.
[editar]Ejemplo
#include <iostream>#include <iomanip>#include <sstream> int main(){std::stringstream ss;std::string in ="Cadena con espacios y también con \"comillas\"";std::string out; auto show =[&](constauto& what){&what ==&in ?std::cout<<"lectura ["<< in <<"]\n"<<"almacenado como ["<< ss.str()<<"]\n":std::cout<<"escritura a la salida ["<< out <<"]\n\n";}; ss << quoted(in);// usa ADL, así que `std::` puede omitirse show(in); ss >> quoted(out); show(out); ss.str("");// borrar el búfer del flujo in ="Cadena con espacios y también con $comillas$";constchar delim {'$'};constchar escape {'%'}; ss << std::quoted(in, delim, escape); show(in); ss >> std::quoted(out, delim, escape); show(out);}
Salida:
lectura [Cadena con espacios y también con "comillas"] almacenado como ["Cadena con espacios y también con \"comillas\""] escritura [Cadena con espacios y también con "comillas"] lectura [Cadena con espacios y también con $comillas$] almacenado como [$Cadena con espacios y también con %$comillas%$$] escritura a la salida [Cadena con espacios y también con $comillas$]
[editar]Véase también
(C++20) | Almacena una representación formateada de los argumentos en una cadena nueva. (plantilla de función) |