Espacios de nombres
Variantes
Acciones

std::quoted

De cppreference.com
< cpp‎ | io‎ | manip
 
 
Biblioteca de E/S
Manipuladores de E/S
E/S estilo C
Búferes
(en desuso en C++98)
Flujos
Abstracciones
E/S de archivos
E/S de cadenas
E/S de arrays
(en desuso en C++98)
(en desuso en C++98)
(en desuso en C++98)
Salida sincronizada
Tipos
Interfaz de categoría de error
(C++11)
 
Manipuladores de E/S
Formateo de punto flotante
Formateo de enteros
Formateo de booleanos
Control de ancho de campo y relleno
Otro formateo
Procesamiento de espacio en blanco
Vaciado de salida
(C++20)  

Manipulación de indicadores de estado
E/S de tiempo y dinero
(C++11)
(C++11)
(C++11)
(C++11)
Manipulación entre comillas
quoted
(C++14)
 
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:

a) Primero, el carácter delim se agrega a la secuencia.
b) Luego, cada carácter de 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.
c) Al final, 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.

4) Cuando se utiliza en una expresión 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:
a) Si el primer carácter extraído no es igual a delim (como se determina por el rasgo de tipo traits_type::eq del flujo), entonces simplemente ejecuta in >> s.
b) De lo contrario (si el primer carácter es el delimitador):
1) Desestablece la bandera skipws en el flujo de entrada;
2) Vacía la cadena destino llamando a s.clear();
3) Extrae caracteres de 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.
4) Descarta el carácter (sin el carácter de escape) final delim.
5) Restablece la bandera skipws en el flujo de entrada a su valor original.

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