Namespaces
Variants

std:: quoted

From cppreference.net
< cpp ‎ | io ‎ | manip
Definiert im Header <iomanip>
template < class CharT >

/*unspecified*/ quoted ( const CharT * s,

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

/*unspecified*/ quoted ( const std:: basic_string < CharT, Traits, Allocator > & s,

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

/*unspecified*/ quoted ( std:: basic_string_view < CharT, Traits > s,

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

/*unspecified*/ quoted ( std:: basic_string < CharT, Traits, Allocator > & s,

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

Ermöglicht das Einfügen und Extrahieren von in Anführungszeichen gesetzten Zeichenketten, wie sie beispielsweise in CSV oder XML vorkommen.

1-3) Wenn in einem Ausdruck verwendet out << quoted ( s, delim, escape ) , wobei out ein Ausgabestream mit char_type gleich CharT und, für Überladungen (2,3), traits_type gleich Traits ist, verhält sich wie eine FormattedOutputFunction , die in out eine Zeichensequenz seq einfügt, die wie folgt konstruiert wird:
a) Zuerst wird das Zeichen delim zur Sequenz hinzugefügt.
b) Dann wird jedes Zeichen aus s ausgegeben, außer wenn das nächste auszugebende Zeichen gleich delim oder gleich escape ist (bestimmt durch traits_type :: eq des Streams), dann wird zuerst eine zusätzliche Kopie von escape angehängt.
c) Am Ende wird delim erneut an seq angehängt.
Dann, falls seq. size ( ) < out. width ( ) , fügt out. width ( ) - seq. size ( ) Kopien des Füllzeichens out. fill ( ) entweder am Ende der Sequenz hinzu (falls ios_base :: left in out. flags ( ) gesetzt ist) oder am Anfang der Sequenz (in allen anderen Fällen).
Schließlich gibt jedes Zeichen aus der resultierenden Sequenz aus, als ob durch Aufruf von out. rdbuf ( ) - > sputn ( seq, n ) , wobei n = std:: max ( out. width ( ) , seq. size ( ) ) und out. width ( 0 ) , um die Effekte von std::setw , falls vorhanden, aufzuheben.
4) Wenn in einem Ausdruck verwendet in >> quoted ( s, delim, escape ) , wobei in ein Eingabestream mit char_type gleich CharT und traits_type gleich Traits ist, extrahiert Zeichen aus in , unter Verwendung von std::basic_istream::operator>> , gemäß den folgenden Regeln:
a) Wenn das erste extrahierte Zeichen nicht gleich delim ist (bestimmt durch traits_type::eq des Streams), dann führt es einfach in >> s aus.
b) Andernfalls (wenn das erste Zeichen das Trennzeichen ist):
1) Schaltet das skipws -Flag im Eingabestrom aus.
2) Leert den Zielstring durch Aufruf von s. clear ( ) .
3) Extrahiert aufeinanderfolgende Zeichen aus in und fügt sie an s an, außer dass, wann immer ein escape -Zeichen extrahiert wird, dieses ignoriert und das nächste Zeichen an s angehängt wird. Die Extraktion stoppt, wenn ! in == true oder wenn ein nicht-escapedes delim -Zeichen gefunden wird.
4) Verwirft das letzte (nicht-escapte) delim Zeichen.
5) Stellt das skipws -Flag im Eingabestrom auf seinen ursprünglichen Wert wieder her.

Inhaltsverzeichnis

Parameter

s - die einzufügende oder zu extrahierende Zeichenkette
delim - das als Trennzeichen zu verwendende Zeichen, standardmäßig "
escape - das als Escape-Zeichen zu verwendende Zeichen, standardmäßig \

Rückgabewert

Gibt ein Objekt eines nicht näher spezifizierten Typs zurück, sodass das beschriebene Verhalten eintritt.

Exceptions

Wirft std::ios_base::failure falls operator >> oder operator << wirft.

Hinweise

Feature-Test Makro Wert Std Feature
__cpp_lib_quoted_string_io 201304L (C++14) std::quoted

Beispiel

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

Ausgabe:

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]

Siehe auch

(C++20)
speichert die formatierte Darstellung der Argumente in einer neuen Zeichenkette
(Funktionsschablone)