std::quoted
| Definido en el archivo de encabezado <iomanip>
|
||
template< class CharT > /*no especificado*/ quoted(const CharT* s, CharT delim=CharT('"'), CharT escape=CharT('\\')); |
(1) | (desde C++14) |
template< class CharT, class Traits, class Allocator > /*no especificado*/ quoted(const std::basic_string<CharT, Traits, Allocator>& s, CharT delim=CharT('"'), CharT escape=CharT('\\')); |
(2) | (desde C++14) |
template< class CharT, class Traits> /*no especificado*/ quoted(std::basic_string_view<CharT, Traits> s, CharT delim=CharT('"'), CharT escape=CharT('\\')); |
(3) | (desde C++17) |
template< class CharT, class Traits, class Allocator > /*no especificado*/ quoted(std::basic_string<CharT, Traits, Allocator>& s, CharT delim=CharT('"'), CharT escape=CharT('\\')); |
(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 >> quoted(s, delim, escape), donde 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.s.clear();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.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.
|
Valor de retorno
Devuelve un objeto de un tipo no especificado tal que el comportamiento descrito toma lugar.
Excepciones
Lanza std::ios_base::failure si el operador operator>> o el operador operator<< lanzan.
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$]
Véase también
(C++20) |
Almacena una representación formateada de los argumentos en una cadena nueva. (plantilla de función) |