株式会社エス・スリー・フォー

3.5 文字列 I/O

クラス RWCString は、iostream および Rogue Wave 仮想ストリームの両方に豊富な I/O 機能を提供します。

3.5.1 iostreams

標準の左シフトおよび右シフト演算子は、iostream および RWCString と共に動作するように多重定義されています。

ostream&operator<<(ostream& stream, const RWCString& cstr);
istream&operator>>(istream& stream, RWCString& cstr);

これらの演算子のセマンティクスは、以下の演算子のセマンティックスと平行しています。

ostream&operator<<(ostream& stream, const char*);
istream&operator>>(istream& stream, char* p);

これらは、コンパイラに付属の標準 C++ ライブラリによって定義されています。つまり、左シフト演算子
<< は、指定の出力ストリームにヌル区切りの文字列を書き込みます。右シフト演算子 >> は、空白類によって区切られた単一トークンを入力ストリームから RWCString に読み取り、以前の内容を置き換えます。

他の関数は、いろいろな RWCString 入力を行うことができます。[1]例えば、readline() 関数は改行によって区切られた文字列を読み取ります。文字を格納する前に空白類を省略するかどうかは、パラメータで指定できます。次の例には、空白類を省略した場合の違いが示されています。

#include <rw/cstring.h>
#include <iostream.h>
#include <fstream.h>

main(){
   RWCString line;

  { int count = 0;
    ifstream istr("testfile.dat");

    while (line.readLine(istr))             // デフォルト値を使用:
                                               // 空白類を省略
      count++;
    cout << count << " lines, skipping whitespace.\n";
  }

  { int count = 0;
    ifstream istr("testfile.dat");
    while (line.readLine(istr, FALSE))        // NB: 省略しない
                                                    // 空白類
      count++;
    cout << count << " lines, not skipping whitespace.\n";
  }

  return 0;
}

入力:

line 1

line 5

出力:

2 lines, skipping whitespace.
5 lines, not skipping whitespace.

3.5.2 仮想ストリーム

Rogue Wave 仮想ストリームに対する文字列演算子にも対応しています。

Rwvistream&  operator>>(RWvistream& vstream, RWCString& cstr);
Rwvostream&  operator<<(RWvostream& vstream,
                        const RWCString& cstr);

これらの演算子を使用することにより、形式を知らなくても文字列を保存および復元することができます。仮想ストリームについては、第 6 章「仮想ストリームの使い方」を参照してください。

注釈

  1. ^ メソッド readFile()、readLine()、readString(istream&)、readToDelim()、およびreadToken() の詳細については、『Tools.h++ Class Reference』の RWCString のセクションを参照。