Namespaces
Variants

std:: quoted

From cppreference.net
< cpp ‎ | io ‎ | manip
Défini dans l'en-tête <iomanip>
template < class CharT >

/*non spécifié*/ quoted ( const CharT * s,

CharT delim = CharT ( '"' ) , CharT escape = CharT ( ' \\ ' ) ) ;
(1) (depuis C++14)
template < class CharT, class Traits, class Allocator >

/*non spécifié*/ quoted ( const std:: basic_string < CharT, Traits, Allocator > & s,

CharT delim = CharT ( '"' ) , CharT escape = CharT ( ' \\ ' ) ) ;
(2) (depuis C++14)
template < class CharT, class Traits >

/*non spécifié*/ quoted ( std:: basic_string_view < CharT, Traits > s,

CharT delim = CharT ( '"' ) , CharT escape = CharT ( ' \\ ' ) ) ;
(3) (depuis C++17)
template < class CharT, class Traits, class Allocator >

/*non spécifié*/ quoted ( std:: basic_string < CharT, Traits, Allocator > & s,

CharT delim = CharT ( '"' ) , CharT escape = CharT ( ' \\ ' ) ) ;
(4) (depuis C++14)

Permet l'insertion et l'extraction de chaînes entre guillemets, telles que celles trouvées dans CSV ou XML .

1-3) Lorsqu'utilisé dans une expression out << quoted ( s, delim, escape ) , où out est un flux de sortie dont le char_type est égal à CharT et, pour les surcharges (2,3), le traits_type est égal à Traits , se comporte comme une FormattedOutputFunction , qui insère dans out une séquence de caractères seq construite comme suit :
a) Premièrement, le caractère delim est ajouté à la séquence.
b) Puis chaque caractère de s , sauf si le prochain caractère à sortir est égal à delim ou égal à escape (tel que déterminé par traits_type :: eq du flux), alors ajoute d'abord une copie supplémentaire de escape .
c) À la fin, delim est ajouté à seq une fois de plus.
Ensuite, si seq. size ( ) < out. width ( ) , ajoute out. width ( ) - seq. size ( ) copies du caractère de remplissage out. fill ( ) soit à la fin de la séquence (si ios_base :: left est défini dans out. flags ( ) ) soit au début de la séquence (dans tous les autres cas).
Finalement, émet chaque caractère de la séquence résultante comme en appelant out. rdbuf ( ) - > sputn ( seq, n ) , où n = std:: max ( out. width ( ) , seq. size ( ) ) et out. width ( 0 ) pour annuler les effets de std::setw , s'il y en a.
4) Lorsqu'il est utilisé dans une expression in >> quoted ( s, delim, escape ) , où in est un flux d'entrée avec char_type égal à CharT et traits_type égal à Traits , extrait des caractères de in , en utilisant std::basic_istream::operator>> , selon les règles suivantes :
a) Si le premier caractère extrait n'est pas égal à delim (tel que déterminé par traits_type::eq du flux), alors effectue simplement in >> s .
b) Sinon (si le premier caractère est le délimiteur) :
1) Désactive le drapeau skipws sur le flux d'entrée.
2) Vide la chaîne de destination en appelant s. clear ( ) .
3) Extrait successivement des caractères de in et les ajoute à s , sauf que chaque fois qu'un caractère escape est extrait, il est ignoré et le caractère suivant est ajouté à s . L'extraction s'arrête lorsque ! in == true ou lorsqu'un caractère delim non échappé est trouvé.
4) Ignore le caractère final (non échappé) delim .
5) Restaure le drapeau skipws sur le flux d'entrée à sa valeur d'origine.

Table des matières

Paramètres

s - la chaîne à insérer ou extraire
delim - le caractère à utiliser comme délimiteur, par défaut "
escape - le caractère à utiliser comme caractère d'échappement, par défaut \

Valeur de retour

Retourne un objet de type non spécifié de telle sorte que le comportement décrit se produise.

Exceptions

Lance std::ios_base::failure si operator >> ou operator << lèvent une exception.

Notes

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_lib_quoted_string_io 201304L (C++14) std::quoted

Exemple

#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();
}

Sortie :

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]

Voir aussi

(C++20)
stocke la représentation formatée des arguments dans une nouvelle chaîne
(modèle de fonction)