Namespaces
Variants

std:: quoted

From cppreference.net
< cpp ‎ | io ‎ | manip
Definido en el 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 entrecomilladas, como las que se encuentran en CSV o XML .

1-3) 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,3), 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 añade a la secuencia.
b) Luego cada carácter de s , excepto si el siguiente carácter a escribir es igual a delim o igual a escape (determinado por traits_type :: eq del flujo), entonces primero añade una copia adicional de escape .
c) Al final, delim se añade a seq una vez más.
Entonces, si seq. size ( ) < out. width ( ) , añade 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 todos los demás casos).
Finalmente, emite cada carácter de la secuencia resultante como si 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 usa 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 con las siguientes reglas:
a) Si el primer carácter extraído no es igual a delim (determinado por traits_type::eq del flujo), entonces simplemente ejecuta in >> s .
b) En caso contrario (si el primer carácter es el delimitador):
1) Desactiva el indicador skipws en el flujo de entrada.
2) Vacía la cadena de destino llamando a s. clear ( ) .
3) Extrae caracteres sucesivos de in y los añade a s , excepto que cuando se extrae un carácter de escape , este se ignora y el siguiente carácter se añade a s . La extracción se detiene cuando ! in == true o cuando se encuentra un carácter delim sin escape.
4) Descarta el carácter final (sin escape) delim .
5) Restaura el indicador skipws en el flujo de entrada a su valor original.

Contenidos

Parámetros

s - la cadena a insertar o extraer
delim - el carácter a utilizar como delimitador, por defecto "
escape - el carácter a utilizar como carácter de escape, por defecto \

Valor de retorno

Devuelve un objeto de tipo no especificado de modo que tenga lugar el comportamiento descrito.

Excepciones

Lanza std::ios_base::failure si operator >> o operator << lanza.

Notas

Macro de prueba de características Valor Estándar Característica
__cpp_lib_quoted_string_io 201304L (C++14) std::quoted

Ejemplo

#include <iomanip>
#include <iostream>
#include <sstream>
void default_delimiter()
{
    const std::string in = "std::quoted() quotes this string and embedded \"quotes\" too";
    std::stringstream ss;
    ss << std::quoted(in);
    std::string out;
    ss >> std::quoted(out);
    std::cout << "Default delimiter case:\n"
                 "read in     [" << in << "]\n"
                 "stored as   [" << ss.str() << "]\n"
                 "written out [" << out << "]\n\n";
}
void custom_delimiter()
{
    const char delim{'$'};
    const char escape{'%'};
    const std::string in = "std::quoted() quotes this string and embedded $quotes$ $too";
    std::stringstream ss;
    ss << std::quoted(in, delim, escape);
    std::string out;
    ss >> std::quoted(out, delim, escape);
    std::cout << "Custom delimiter case:\n"
                 "read in     [" << in << "]\n"
                 "stored as   [" << ss.str() << "]\n"
                 "written out [" << out << "]\n\n";
}
int main()
{
    default_delimiter();
    custom_delimiter();
}

Salida:

Default delimiter case:
read in     [std::quoted() quotes this string and embedded "quotes" too]
stored as   ["std::quoted() quotes this string and embedded \"quotes\" too"]
written out [std::quoted() quotes this string and embedded "quotes" too]
Custom delimiter case:
read in     [std::quoted() quotes this string and embedded $quotes$ $too]
stored as   [$std::quoted() quotes this string and embedded %$quotes%$ %$too$]
written out [std::quoted() quotes this string and embedded $quotes$ $too]

Véase también

(C++20)
almacena la representación formateada de los argumentos en una nueva cadena
(plantilla de función)