Namensräume
Varianten
Aktionen

std::quoted

Von cppreference.com
< cpp‎ | io‎ | manip
 
 
 
Input/output-Manipulatoren
Formatierung von Gleitkommazahlen
Ganzzahlformatierung
Boolean-Formatierung
Feldbreiten- und Füllzeichensteuerung
Andere Formatierungen
Leerzeichenverarbeitung
Ausgabe-Flushen
(C++20)  

Statusflags-Manipulation
Zeit- und Geld-I/O
(C++11)
(C++11)
(C++11)
(C++11)
Gequoteter Manipulator
quoted
(C++14)
 
Definiert im Header <iomanip>
template< class CharT >

/*nicht spezifiziert*/ quoted( const CharT* s,

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

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

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

/*nicht spezifiziert*/ 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 >

/*nicht spezifiziert*/ 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 Anführungszeichen-umschlossenen Zeichenketten, wie sie z.B. in CSV oder XML vorkommen.

1-3) Wenn in einem Ausdruck out << quoted(s, delim, escape) verwendet wird, wobei out ein Ausgabestrom mit char_type gleich CharT und für die Ü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 aufgebaut ist:
a) Zuerst wird das Zeichen delim zur Sequenz hinzugefügt.
b) Dann jedes Zeichen aus s, es sei denn, das nächste auszugebende Zeichen entspricht delim oder escape (bestimmt durch den Stream traits_type::eq), dann wird zuerst eine zusätzliche Kopie von escape angehängt.
c) Am Ende wird delim noch einmal an seq angehängt.
Dann, wenn seq.size() < out.width(), werden out.width()-seq.size() Kopien des Füllzeichens out.fill() entweder am Ende der Sequenz (wenn ios_base::left in out.flags() gesetzt ist) oder am Anfang der Sequenz (in allen anderen Fällen) hinzugefügt.
Schließlich wird jedes Zeichen aus der resultierenden Sequenz ausgegeben, als ob out.rdbuf()->sputn(seq, n) aufgerufen würde, wobei n=std::max(out.width(), seq.size()) und out.width(0) aufgerufen wird, um die Auswirkungen von std::setw ggf. zu löschen.
4) Wenn in einem Ausdruck in >> quoted(s, delim, escape) verwendet wird, wobei in ein Eingabestrom mit char_type gleich CharT und traits_type gleich Traits ist, werden Zeichen aus in extrahiert, unter Verwendung von std::basic_istream::operator>>, gemäß den folgenden Regeln:
a) Wenn das erste extrahierte Zeichen nicht delim entspricht (bestimmt durch die Stream traits_type::eq), wird einfach in >> s ausgeführt.
b) Andernfalls (wenn das erste Zeichen der Begrenzer ist)
1) Wird das skipws-Flag des Eingabestroms deaktiviert.
2) Der Zielstring wird durch Aufruf von s.clear() geleert.
3) Zeichen werden aus in extrahiert und an s angehängt, mit der Ausnahme, dass immer dann, wenn 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-escaped delim-Zeichen gefunden wird.
4) Das abschließende (nicht-escaped) delim-Zeichen wird verworfen.
5) Das skipws-Flag des Eingabestroms wird auf seinen ursprünglichen Wert zurückgesetzt.

Inhalt

[edit] Parameter

s - der einzufügende oder zu extrahierende String
delim - das als Trennzeichen zu verwendende Zeichen, Standard ist "
escape - das als Escape-Zeichen zu verwendende Zeichen, Standard ist \

[edit] Rückgabewert

Gibt ein Objekt unbekannten Typs zurück, für das das beschriebene Verhalten stattfindet.

[edit] Ausnahmen

Wirft std::ios_base::failure, wenn operator>> oder operator<< wirft.

[edit] Hinweise

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

[edit] 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]

[edit] Siehe auch

(C++20)
speichert die formatierte Darstellung der Argumente in einem neuen String
(Funktionstemplate) [bearbeiten]