名前空間
変種
操作

std::quoted

From cppreference.com
< cpp‎ | io‎ | manip
 
 
 
入出力マニピュレータ
浮動小数点フォーマット
整数フォーマット
boolフォーマット
フィールド幅と埋め文字制御
その他のフォーマット
空白文字の処理
出力のフラッシュ
(C++20)  

ステータスフラグの操作
時間と通貨のI/O
(C++11)
(C++11)
(C++11)
(C++11)
クォート付きマニピュレータ
quoted
(C++14)
 
ヘッダ<iomanip>で定義
template< class CharT >

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

                        CharT delim = CharT('"'), CharT escape = CharT('\\') );
(1) (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) (C++14以降)
template< class CharT, class Traits>

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

                        CharT delim = CharT('"'), CharT escape = CharT('\\') );
(3) (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) (C++14以降)

CSVやXMLのような引用符付き文字列の挿入と抽出を可能にします。

1-3)out << quoted(s, delim, escape) で使用される場合、ここで outchar_typeCharT に等しく、オーバーロード (2,3) の場合、traits_typeTraits に等しい出力ストリームであり、FormattedOutputFunction として動作し、次のように構築された文字シーケンス seqout に挿入します
a) まず、文字 delim がシーケンスに追加されます。
b) 次に s からのすべての文字が追加されます。ただし、出力する次の文字が delim に等しいか、または escape に等しい場合 (ストリームの traits_type::eq によって決定される)、まず escape の追加コピーが追加されます。
c) 最後に、delimseq にもう一度追加されます。
次に、seq.size() < out.width() の場合、埋め込み文字 out.fill()out.width()-seq.size() 個のコピーが、シーケンスの末尾 ( out.flags()ios_base::left が設定されている場合) またはシーケンスの先頭 (その他すべての場合) に追加されます。
最後に、結果のシーケンスの各文字が、out.rdbuf()->sputn(seq, n) を呼び出すかのように出力されます。ここで n=std::max(out.width(), seq.size()) であり、もしあれば std::setw の効果を無効にするために out.width(0) が呼び出されます。
4)in >> quoted(s, delim, escape) で使用される場合、ここで inchar_typeCharT に等しく、traits_typeTraits に等しい入力ストリームであり、以下のルールに従って std::basic_istream::operator>> を使用して in から文字を抽出します
a) 抽出された最初の文字が delim に等しくない場合 (ストリームの traits_type::eq によって決定される)、単純に in >> s を実行します。
b) そうでない場合 (最初の文字が区切り文字の場合)
1) 入力ストリームの skipws フラグをオフにします。
2) s.clear() を呼び出して、宛先文字列を空にします。
3) in から文字を抽出し、s に追加します。ただし、escape 文字が抽出された場合は無視され、次の文字が s に追加されます。抽出は !in == true になるか、エスケープされていない delim 文字が見つかったときに停止します。
4) 最後の (エスケープされていない) delim 文字を破棄します。
5) 入力ストリームの skipws フラグを元の値に復元します。

目次

[編集] パラメータ

s - 挿入または抽出する文字列
delim - 区切り文字として使用する文字。デフォルトは "
escape - エスケープ文字として使用する文字。デフォルトは \

[編集] 戻り値

記述された動作が発生するような、不特定の型のオブジェクトを返します。

[編集] 例外

operator>> または operator<< が例外をスローした場合、std::ios_base::failure をスローします。

[編集] 備考

機能テストマクロ 規格 機能
__cpp_lib_quoted_string_io 201304L (C++14) std::quoted

[編集]

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

出力

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]

[編集] 関連項目

(C++20)
引数のフォーマット済み表現を新しい文字列に格納する
(関数テンプレート) [編集]
English 日本語 中文(简体) 中文(繁體)