名前空間
変種
操作

std::basic_stringbuf::str

提供: cppreference.com
< cpp‎ | io‎ | basic stringbuf
 
 
 
 
std::basic_string<CharT, Traits, Allocator> str() const;
(1)
void str( const std::basic_string<CharT, Traits, Allocator>& s);
(2)

ベースとなる文字列を取得または設定します。

1) この std::basic_stringbuf のベースとなる文字シーケンスのコピーを格納する std::basic_string オブジェクトを作成して返します。 入力専用ストリームの場合、返される文字列は範囲 [eback(), egptr()) の文字を格納します。 入出力両用または出力専用ストリームの場合は、 egptr()epptr() にかかわらず、 pbase() からシーケンス内の最後の文字までの文字を格納します。
書き込み用に開いたバッファ内のメンバ文字シーケンスは効率目的で過剰に確保されることがあります。 その場合は初期化済みの文字のみが返されます。 これらの文字はコンストラクタの文字列引数か、 str() の2つめのオーバーロードの最も最近の呼び出しの文字列引数か、書き込み操作から取得した文字です。 過剰な確保を用いる一般的な実装は、バッファの初期化済み部分の終端を追跡するために高水位ポインタを維持管理し、このオーバーロードは pbase() からその高水位ポインタまでの文字を返します。 (C++11およびそれ以降)
2) この std::basic_stringbuf のベースとなる文字シーケンス全体を削除し、 s の内容のコピーを格納する新しいベースとなる文字シーケンスを設定します。 std::basic_streambuf のポインタは以下のように初期化されます。
  • 入力ストリーム (mode & ios_base::in == true) の場合、 eback() は最初の文字を指し、 gptr() == eback() および egptr() == eback() + s.size() となります。 後続の入力は s からコピーされた最初の文字を読み込みます。
  • 出力ストリーム (mode & ios_base::out == true) の場合、 pbase() は最初の文字を指し、 epptr() >= pbase() + s.size() となります (epptr は後続の sputc() が直ちに overflow() を呼ばないようにさらに進んだ位置を指しても構いません)。
    • 追記ストリーム (mode & ios_base::ate == true) の場合、後続の出力が s からコピーされた最後の文字に追加されるように、 pptr() == pbase() + s.size() になります。 (C++11およびそれ以降)
    • 追記でない出力ストリームの場合、後続の出力が s からコピーした文字を上書きするように、 pptr() == pbase() になります。

目次

[編集] 引数

s - 置き換える文字シーケンスを保持する文字列オブジェクト

[編集] 戻り値

1) このバッファのベースとなる文字シーケンスのコピーを保持する文字列オブジェクト。
2) (なし)

[編集] ノート

この関数は一般的には std::basic_stringstream::str() を通してアクセスされます。

[編集]

#include <sstream>
#include <iostream>
int main()
{
    int n;
 
    std::istringstream in;  // could also use in("1 2")
    in.rdbuf()->str("1 2"); // set the get area
    in >> n;
    std::cout << "after reading the first int from \"1 2\", the int is " 
              << n << ", str() = \"" << in.rdbuf()->str() << "\"\n"; // or in.str()
 
    std::ostringstream out("1 2");
    out << 3;
    std::cout << "after writing the int '3' to output stream \"1 2\""
              << ", str() = \"" << out.str() << "\"\n";
 
    std::ostringstream ate("1 2", std::ios_base::ate); // C++11
    ate << 3;
    std::cout << "after writing the int '3' to append stream \"1 2\""
              << ", str() = \"" << ate.str() << "\"\n";
}

出力:

after reading the first int from "1 2", the int is 1, str() = "1 2"
after writing the int '3' to output stream "1 2", str() = "3 2"
after writing the int '3' to append stream "1 2", str() = "1 23"

[編集] 関連項目

ベースとなる文字列デバイスオブジェクトを取得または設定します
(std::basic_stringstreamのパブリックメンバ関数) [edit]