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(const std::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 = [&](const auto& 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$"; const char delim {'$'}; const char 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) |