## 10.1 文字列ストリームとは

入出力ストリーム機能では、ファイルなどの外部デバイスに対する入出力だけでなく、メモリー内構文解析と書式設定もサポートしています。読み書きした文字のソースとシンクは、メモリー内のどこかに文字列として保存されます。読み取る情報がすでに文字列形式になっている場合や、書式設定した結果が文字列として処理される場合は、メモリー内入出力を使用します。たとえば、文字列 `argv[1]` の内容を整数値として解釈するには、次のようなコードを使用します。

>     int i;
>     if (istringstream(argv[1]) >> i)                             //1
>        // 値 i を使用

//1 | 入力文字列ストリームコンストラクタのパラメータは文字列です。ここで、引数として文字配列 `argv[1]` が与えられ、暗黙的に文字列に変換されます。`argv[1]` が組み込まれた、この新しく構築された入力文字列ストリームから、整数値を抽出します。

与えられた値を文字に変換して文字列に保存する逆演算は、次のようになります。

>     struct date {
>       int day,month,year;
>     } today = {8,4,1996};
>     ostringstream ostr;                                           //1
>     ostr << today.month << '-' << today.day <<'-' << today.year;  //2
>     if (ostr)
>        display(ostr.str());                                       //3

//1 | 出力文字列ストリームを割り当てます。
//2 | 値が出力文字列ストリームに挿入されます。
//3 | 書式設定の結果は、文字列形式で取り出すことができます。これは `str()` で返ります。

ファイルストリームと同様に、文字列ストリームを実装するクラステンプレートが 3 つあります。それは、basic_istringstream <charT,traits,Allocator>、basic_ostringstream <charT,traits,Allocator>、basic_stringstream <charT,traits,Allocator>です。これらはストリーム基底クラスの basic_istream <charT, traits>、basic_ostream <charT, traits>、basic_iostream <charT, traits> から派生したものです。したがって、ストリーム状態だけでなく、第 7 章で説明した書式設定されたすべての入出力用の関数を継承します。これらのテンプレートには、ソースやシンクとなる文字列の設定や検索機能があります。また、構築前の文字列の設定を行うためのコンストラクタもあります。標準定義の `istringstream`、`ostringstream`、`stringstream` 文字列ストリームや、ワイド文字列ストリーム用の `wistringstream`、`wostringstream`、`wstringstream` もあるので便利です。

バッファ処理は、専用のバッファクラス basic_stringbuf <charT,traits,Allocator> で行います。

Copyright (c) 1998, Rogue Wave Software, Inc.
このマニュアルに関する誤りのご指摘やご質問は、電子メールにてお送りください。

OEM リリース, 1998 年 6 月