Tools.h++ 7.0 クラスライブラリ・リファレンスマニュアル: RWCString

バナーをクリックすれば目次に戻ります

Copyright 1999 Rogue Wave Software
Copyright 1999 Sun Microsystems, Inc.

## RWCString

### 形式

      #include <rw/cstring.h>
      RWCString a;

### 説明

  このクラスは、非常に強力で便利な文字列操作機能を持っているクラスで、よく知られた標準 C の `<string.h>` 関数とまったく同様に効率良く働きます。

  このクラスは、主に単一バイト文字セット (SBCS; ASCII や ISO Latin-1 など) を処理するために作られていますが、注意して使用すれば複数バイト文字セット (MBCS) も扱うことができます。MBCS を扱うときには、次の 2 つの点に注意しなければなりません。

  - 複数バイトから成る文字があるので、文字列のバイト数は通常、文字列の文字数より多くなります。文字列のバイト数を得るには関数 `RWCString::length()` を、また文字数を得るには関数 `RWCString::mbLength()` を使用します。後者の関数は、各文字のバイト数を調べなければならないので、かなり処理が遅くなります。したがって、文字列が SBCS だと分かっている場合は、`RWCString::length()` を使用する方をお勧めします。

  - 複数バイト文字のバイトはヌル文字であることもできます。したがってヌル文字で終了の印とすることはできません。実際には、ヌル文字を含む MBCS はほとんどありませんが、ヌル文字を考慮してプログラミングしておく必要があります。いずれの場合も、クラス RWCString は埋め込まれたヌルを処理できます。`const char*` 型のパラメータには NULL を渡さないでください。これはライブラリのデバッグバージョンで検出されます。

  このクラスは、コピー・オン・ライト (copy on write: 書き込み時コピー) と言われる技法を使用して実装されています。この技法では、コピーコンストラクタと代入演算子は古いオブジェクトを参照するため、非常に高速です。実際のコピーは、書き込みが行われるときだけ、つまりオブジェクトが変更されるときだけ行われます。その結果パフォーマンスは向上し、またコピー型の意味はわかりやすいものになります。

  クラス RWCSubString は、部分文字列の抽出と変更をサポートします。

### 持続性

  単純

### 例

      #include <rw/re.h>
      #include <rw/rstream.h>

      main(){
        RWCString a("There is no joy in Beantown.");

        cout << a << endl << "becomes...." << endl;

        RWCRExpr re("[A-Z][a-z]*town");      // "town" を含む文字列 (先頭のみ
                                             //  大文字)
        a.replace(re, "Redmond");
        cout << a << endl;
      }

  #### プログラム出力:

      There is no joy in Redmond.

### 列挙型

      enum RWCString::caseCompare { exact, ignoreCase }

    比較、検索およびハッシュの各関数において、大文字、小文字を区別する `(exact)` か区別しない `(ignoreCase)` かのどちらを使用するかを指定します。

      enum RWCString::scopeType { one, all }

    正規表現に対する `replace` が、正規表現によって検索される最初の 1 個の`(one)` 部分文字列を置換するか、またはすべての (`all)` 部分文字列を置換するかを指定するのに使用します。

### 公開コンストラクタ

      RWCString();

    長さがゼロの文字列 (空文字列) を作成します。

      RWCString(const char* cs);

    ヌル文字で終了する文字列 `cs` から変換します。作成された文字列に、`cs` が指した場所から最初にヌル文字を検出した場所までのデータをコピーします。この関数はヌル文字を含む `cs` 文字列に対して使えません。この関数は `cs` MBCS 文字列に対して使えない場合があります。

      RWCString(const char* cs, size_t N);

    文字列 `cs` から文字列を作成します。作成された文字列に、`cs` が指すデータをちょうど `N` 文字 (文字列中のヌル文字を含む) コピーします。したがって、`cs` が指すバッファには少なくとも `N` バイト長が必要です。

      RWCString(RWSize_T ic);

    長さがゼロの文字列 (空文字列) を作成します。その文字列に、パラメータ `ic` が与えるサイズ (つまり、サイズを変更せずに拡大できる最大長さ)を与えます。数値定数から `RWSize_T` 値を作成し、このコンストラクタに渡すことをお薦めします。`RWSize_T` は `size_t` をそれ自身に変換する方法を知っていますが、標準的なコンパイラは `char` に変換する方を選択します。

      RWCString(const RWCString& str);

    コピーコンストラクタ。作成された文字列に、`str` のデータをコピーします。

      RWCString(const RWCSubString& ss);

    部分文字列から変換します。作成された文字列に、`ss` の部分文字列をコピーします。

      RWCString(char c);

    単一文字 `c` を含む文字列を作成します。

      RWCString(char c, size_t N);

    文字 `c` を `N` 個並べた文字列を作成します。

### 型変換

      operator
      const char*() const;

    ヌル文字で終了する文字列である、RWCString のデータにアクセスします。このデータは RWCString のもので、削除や変更はできません。RWCString オブジェクト自身が変化したり有効範囲から外に出たりすると、以前に返されたポインタ値は無効になることがあります。文字列がヌル文字で終わっているので、その長さはメンバー関数 `length()` から与えられます。したがって、埋め込まれたヌルが含まれていることもあります。

### 代入演算子

      RWCString&
      operator=(const char* cs);

    `cs` が指す、ヌル文字で終わる文字列を自分自身にコピーします。この関数はヌル文字を含む `cs` 文字列に対して使えません。この関数は `cs` MBCS 文字列に対して使えない場合があります。

      RWCString&
      operator=(const RWCString& str);

    `str` のデータを文字列にコピーし、自分自身への参照を返します。

      RWCString&
      operator+=(const char* cs);

    `cs` が指す、ヌル文字で終わる文字列を自分自身に追加し、自分自身への参照を返します。この関数はヌル文字を含む `cs` 文字列に対して使えません。この関数は `cs` MBCS 文字列に対して使えない場合があります。

      RWCString&
      operator+=(const RWCString& str);

    文字列 `str` を自分自身に追加し、自分自身への参照を返します。

### インデックス付け演算子

      char&
      operator[](size_t i);
      char
      operator[](size_t i) const;

    `i` 番目の文字を返します。最初に記述したほうの可変要素を左辺値として使用できます。インデックス `i` は 0 〜 (文字列長 -1) の範囲になければなりません。境界検査を行い、インデックスが範囲外にあると RWBoundsErr 型の例外が発生します。

      char&
      operator()(size_t i);
      char
      operator()(size_t i) const;

    `i` 番目の文字を返します。最初に記述したほうの可変要素を左辺値として使用できます。インデックス `i` は 0 〜 (文字列長 -1) の範囲になければなりません。`<rw/cstring.h>` を取り込む前に前処理マクロ `RWBOUNDS_CHECK` を定義した場合は境界検査を行います。このときインデックスが範囲外にあると RWBoundsErr 型の例外が発生します。

      RWCSubString
      operator()(size_t start, size_t len);
      const RWCSubString
      operator()(size_t start, size_t len) const;

    部分文字列演算子。自分自身の部分文字列で、インデックス `start` で始まる長さ `len` の RWCSubString を返します。最初の可変要素を左辺値として使用できます。`start` と `len` を加えた長さが文字列長以下でなければなりません。ライブラリが `RWDEBUG` フラグを使用して作成されていて、かつ `start` と `len` を加えた長さが範囲外であると RWBoundsErr 型の例外が発生します。

      RWCSubString
      operator()(const RWCRExpr& re, size_t start=0);
      const RWCSubString
      operator()(const RWCRExpr& re, size_t start=0) const;
      RWCSubString
      operator()(const RWCRegexp& re, size_t start=0);
      const RWCSubString
      operator()(const RWCRegexp& re, size_t start=0) const;

    インデックス `start` 以降で正規表現 `re` と一致する最初の部分文字列を返します。一致する部分文字列がなければ、NULL 部分文字列が返されます。最初に記述したほうの可変要素を左辺値として使用できます。`operator()(const RWCRExpr&...)` を使用したい場合、替わりに `match(const RWCRExpr&...)` を使用しなければなりません。この理由は、現在 RWCRegexp を確保していますが、`RWCString::operator("string")` の場合 `operator(const RWCRExpr&...)` と `operator(const RWCRegexp)` は曖昧だからです。さらに、`RWCString::operator(0)` の場合、`operator(const char*)` と `operator(size_t)` は曖昧です。この関数はヌル文字を含む文字列に対して使えない場合があります。この関数は `cs` MBCS 文字列に対して使えません。

### 公開メンバー関数

      RWCString&
      append(const char* cs);

    `cs` が指す、ヌル文字で終わる文字列を自分自身に追加し、自分自身への参照を返します。この関数はヌル文字を含む `cs` 文字列に対して使えません。この関数は `cs` MBCS 文字列に対して使えない場合があります。

      RWCString&
      append(const char* cs, size_t N);

    文字列 `cs` を `N` バイト (埋め込まれたヌルを含む) を自分自身に追加します。したがって、`cs` が指すバッファには少なくとも `N` バイト長が必要です。自分自身への参照を返します。

      RWCString&
      append(char c, size_t N);

    文字 `c` の `N` 個のコピーを自分自身に追加し、自分自身への参照を返します。

      RWCString&
      append(const RWCString& cstr);

    文字列 `cstr` を自分自身に追加し、自分自身への参照を返します。

      RWCString&
      append(const RWCString& cstr, size_t N);

    文字列 `cstr` の最初の `N` バイトまたは `cstr` の長さのうちどちらか小さい方を自分自身に追加し、自分自身への参照を返します。

      size_t
      binaryStoreSize() const;

    次の大域関数を使用してオブジェクトを格納する際に必要なバイト数を返します。

          RWFile& operator<<(RWFile&, const RWCString&);
      size_t
      capacity() const;

    現在の自分自身の容量を返します。文字列がサイズを変更せずに持てる文字の数です。

      size_t
      capacity(size_t capac);

    自分自身の容量の変更を実装されたプログラムに知らせ、実際の容量を返します。

      int
      collate(const char* str) const;
      int
      collate(const RWCString& str) const;

    自分自身と引数 `str` に対して標準 C ライブラリ関数 `::strcoll()` を呼び出した結果に応じて、ゼロ未満、ゼロより大きい、またはゼロの整数を返します。ロケール依存の照合をサポートします。`::strcoll()` を提供するプラットフォーム上でのみ提供されます。この関数はヌル文字を含む文字列に対して使えません。

      int
      compareTo(const char* str, caseCompare = RWCString::exact) const;
      int
      compareTo(const RWCString& str,
                caseCompare = RWCString::exact) const;

    自分自身と引数 `str` に対して標準 C ライブラリ関数 `memcmp()` を呼び出した結果に応じて、ゼロ未満、ゼロより大きい、またはゼロの整数を返します。大文字と小文字を区別するかどうかは `caseCompare` 引数によって決まります。`RWCString::exact` か `RWCString::ignoreCase` のいずれかになります。`caseCompare` が `RWCString::exact` である場合、この関数はすべての文字列種類に対し機能します。それ以外の場合、この関数は MBCS 文字列に対して使えません。この関数はヌル文字を含む `const char*` 文字列に対して使えません。この関数は `const char*` MBCS 文字列に対して使えない場合があります。

      RWBoolean
      contains(const char* str, caseCompare = RWCString::exact)
               const;
      RWBoolean
      contains(const RWCString& cs,
               caseCompare = RWCString::exact) const;

    パターンマッチング。`str` が自分自身内に存在すれば `TRUE` を返します。大文字と小文字を区別するかどうかは `caseCompare` 引数によって決まります。`RWCString::exact` か `RWCString::ignoreCase` のいずれかになります。`caseCompare` が `RWCString::exact` である場合、この関数はすべての文字列種類に対し機能します。それ以外の場合、この関数は MBCS 文字列に対して使えません。この関数はヌル文字を含む `const char*` 文字列に対して使えません。この関数は `const char*` MBCS 文字列に対して使えない場合があります。

      const char*
      data() const;

    ヌル文字で終了する文字列として、RWCString のデータにアクセスします。このデータは RWCString のもので、削除や変更はできません。RWCString オブジェクト自身が変化したり有効範囲から外に出たりすると、以前に返されたポインタ値は無効になります。文字列がヌル文字で終わっているので、その長さはメンバー関数 `length()` から与えられます。したがって、文字列中のヌル文字が含まれていることもあります。

      size_t
      first(char c) const;

    自分自身内で最初に文字 `c` が現れる場所のインデックスを返します。`c` がないか、または、`c` の前にヌル文字が埋め込まれていれば `RW_NPOS` を返します。この関数はヌル文字を含む文字列に対して使えません。この関数は MBCS 文字列に対して使えません。

      size_t
      first(char c, size_t) const;

    自分自身内で文字 `c` が最初に現れる場所のインデックスを返します。埋め込まれたヌルが検出されても検索を続けます。この文字がなければ `RW_NPOS` を返します。この関数は MBCS 文字列と互換性がありません。

      size_t
      first(const char* str) const;

    自分自身内で `str` に含まれる任意の文字が最初に現れる場所のインデックスを返します。検出されなかったり、検出されるヌル文字が検出されたりすると `RW_NPOS` を返します。この関数はヌル文字を含む文字列に対して使えません。この関数は MBCS 文字列に対して使えない場合があります。

      size_t
      first(const char* str, size_t N) const;

    自分自身内で `str` に含まれる任意の文字が最初に現れる場所のインデックスを返します。埋め込まれたヌルを含め、`str` にある `N` バイトがチェックされます。したがって、`str` が指すバッファには少なくとも `N` バイトの長さが必要です。一致するものがなければ `RW_NPOS` を返します。

      unsigned
      hash(caseCompare = RWCString::exact) const;

    適切なハッシュ値を返します。`caseCompare` が `RWCString::ignoreCase` である場合、この関数は MBCS 文字列に対して使えません。

      size_t
      index(const char* pat,size_t i=0,
            caseCompare = RWCString::exact) const;
      size_t
      index(const RWCString& pat,size_t i=0,
            caseCompare = RWCString::exact) const;

    パターンマッチング。インデックス `i` から自分自身内の `pat` を検索し、最初に発見した場所のインデックスを返します。一致するパターンがなければ `RW_NPOS` を返します。大文字と小文字を区別するかどうかは `caseCompare` 引数によって決まります。デフォルトでは `RWCString::exact` になります。`caseCompare` が `RWCString::exact` である場合、この関数はすべての文字列種類に対し機能します。それ以外の場合、この関数は MBCS 文字列に対して使えません。

      size_t
      index(const char* pat, size_t patlen,size_t i,
            caseCompare cmp) const;
      size_t
      index(const RWCString& pat, size_t patlen,size_t i,
            caseCompare cmp) const;

    パターンマッチング。インデックス `i` から自分自身内の `patlen` バイトの長さのパターン `pat` を検索し、最初に発見した場所のインデックスを返します。一致するパターンがなければ `RW_NPOS` を返します。大文字と小文字を区別するかどうかは `caseCompare` 引数によって決まります。`caseCompare` が `RWCString::exact` である場合、この関数はすべての文字列種類に対し機能します。それ以外の場合、この関数は MBCS 文字列に対して使えません。

      size_t
      index(const RWCRExpr& re, size_t i=0) const;
      size_t
      index(const RWCRegexp& re, size_t i=0) const;

    正規表現マッチング。正規表現 `re` と一致する最初のパターンのインデックス `i` 以上のインデックスを返します。一致するパターンがなければ `RW_NPOS` を返します。この関数は MBCS 文字列に対して使えません。

      size_t
      index(const RWCRExpr& re,size_t* ext,size_t i=0) const;
      size_t
      index(const RWCRegexp& re,size_t* ext,size_t i=0) const;

    正規表現マッチング。正規表現 `re` と一致する最初のパターンのインデックス `i` 以上のインデックスを返します。一致するパターンがなければ `RW_NPOS` を返します。一致したパターンの長さは `ext` が指す変数に返されます。この関数はヌル文字を含む文字列に対して使えません。この関数は MBCS 文字列に対して使えない場合があります。

      RWCString&
      insert(size_t pos, const char* cs);

    ヌル文字で終わる文字列 `cs` を自分自身のバイト位置 `pos` に挿入して文字列を拡張します。自分自身への参照を返します。この関数はヌル文字を含む `cs` 文字列に対して使えません。この関数は `cs` MBCS 文字列に対して使えない場合があります。

      RWCString&
      insert(size_t pos, const char* cs, size_t N);

    `cs` 文字列の最初の `N` バイト (埋め込まれたヌルを含む) を自分自身のバイト位置 `pos` に挿入します。したがって、`cs` が指すバッファには少なくとも `N` バイト長が必要です。自分自身への参照を返します。

      RWCString&
      insert(size_t pos, const RWCString& str);

    `str` 文字列を自分自身の `pos` 位置に挿入し、自分自身への参照を返します。

      RWCString&
      insert(size_t pos, const RWCString& str, size_t N);

    文字列 `str` の最初の `N` バイト、または `str` が指す長さのうちどちらか小さい方を自分自身の `pos` 位置に挿入し、自分自身への参照を返します。

      RWBoolean
      isAscii() const;

    自分自身の中に MSB が 1 の文字がなければ `TRUE` を返します。

      RWBoolean
      isNull() const;

    自分自身が長さゼロの文字列 (空文字列) である場合に `TRUE` を返します。

      size_t
      last(char c) const;

    文字列の中で、文字 c が最後に現れる場所のインデックスを返します。一致するものがないか、または、自分自身の中の c の右側に埋め込まれたヌル文字があれば、RW_NPOS を返します。この関数はヌル文字を含む文字列に対して使えません。この関数は MBCS 文字列に対して使えない場合があります。

      size_t
      last(char c, size_t N) const;

    文字列の中で、文字 `c` が最後に現れる場所のインデックスを返します。埋め込まれた ヌルを検出しても検索が続きます。このような文字がなければ、`RW_NPOS` を返します。この関数は MBCS 文字列に対して使えません。

      size_t
      length() const;

    自分自身内のバイト数を返します。自分自身内に複数バイト文字があれば、この値は文字数とは一致しません。

      RWCSubString
      match(const RWCRExpr& re, size_t start=0);
      const RWCSubString
      match(const RWCRExpr& re, size_t start=0) const;

    インデックス `start` 以降で正規表現 `re` と一致する最初の部分文字列を返します。一致する部分文字列がなければ、空部分文字列が返されます。最初に記述した方の可変要素を左辺値として使用できます。拡張正規表現を使用したい場合、これは `operator()(const RWCRegexp&...)` の替わりに使用されることに注意してください。

      size_t
      mbLength() const;

    標準 C の関数 `::mblen()` の結果に応じて、自分自身内の複数バイト文字の数を返します。不正な文字があれば、`RW_NPOS` を返します。通常は、`mbLength()` ≦ `length()` です。`::mblen()` を提供するプラットフォーム上でのみ提供されます。

      RWCString&
      prepend(const char* cs);

    `cs` が指す、ヌル文字で終わる文字列を自分自身の前方に挿入し、自分自身への参照を返します。この関数はヌル文字を含む `cs` 文字列に対して使えません。この関数は `cs` MBCS 文字列に対して使えない場合があります。

      RWCString&
      prepend(const char* cs, size_t N);

    文字列 `cs` を `N` バイト (文字列中のヌル文字を含む) だけ自分自身の前方に挿入します。したがって、`cs` が示すバッファには少なくとも `N` バイト長が必要です。自分自身への参照を返します。

      RWCString&
      prepend(char c, size_t N);

    文字 `c` の `N` 個のコピーを自分自身の前方に挿入し、自分自身への参照を返します。

      RWCString&
      prepend(const RWCString& str);

    文字列 `str` を自分自身の前方に挿入し、自分自身への参照を返します。

      RWCString&
      prepend(const RWCString& cstr, size_t N);

    文字列 `cstr` の最初の `N` バイト、または `cstr` が示す長さのうちどちらか小さい方を自分自身の前方に挿入し、自分自身への参照を返します。

      istream&
      readFile(istream& s);

    `EOF` に達するまで入力ストリーム `s` から文字を読み込み、自分自身の以前の内容を書き換えます。ヌル文字は他の文字と同様に扱います。

      istream&
      readLine(istream& s, RWBoolean skipWhite = TRUE);

    復帰改行か `EOF` に達するまで入力ストリーム `s` から文字を読み込み、自分自身の以前の内容を書き換えます。復帰改行は入力ストリームから取り除かれますが、格納されません。ヌル文字は他の文字と同様に扱います。`skipWhite` 引数が `TRUE` ならば、`iostream` ライブラリマニピュレータ `ws` を使用して空白を読み飛ばしてから文字を保存します。

      istream&
      readString(istream& s);

    `EOF` かヌル終端文字に達するまで入力ストリーム `s` から文字を読み込み、自分自身の以前の内容を置き換えます。ストリームに残っているバイト数が多い場合、このメソッドを使用する前に RWCString の大きさを、読み込むおおよそのバイト数に変更するようにしてください。詳細は、『Tools.h++ 7.0 ユーザーズガイド』の「Implementation Details」を参照してください。この関数はヌル文字を含む文字列に対して使えません。この関数は MBCS 文字列に対して使えない場合があります。

      istream&
      readToDelim(istream& s, char delim='\n');

    `EOF` か区切り文字 `delim` に達するまで、入力ストリーム `s` から文字を読み込み、自分自身の以前の内容を書き換えます。区切り文字は入力ストリームから取り除かれますが、格納されません。ヌル文字は、他の文字と同様に扱います。`delim` が `'\0'` の場合、この関数はヌル文字を含む文字列に対して使えません。`delim` が `'\0'` の場合、この関数は MBCS 文字列に対して使えない場合があります。

      istream&
      readToken(istream& s);

    空白を読み飛ばしてから文字を読み込みます。後続の空白か `EOF` に達するまで入力ストリーム `s` から文字を読み込み、自分自身の以前の内容を書き換えます。入力ストリーム内の空白はそのまま残されます。ヌル文字は、他の文字と同様に扱います。空白は、標準 C ライブラリ関数 `isspace()` を使用して認識します。この関数は MBCS 文字列に対して使えません。

      RWCString&
      remove(size_t pos);

    `pos length()` の大きさ以下でなければならないバイト位置から文字列の終端までの文字を削除し、自分自身への参照を返します。

      RWCString&
      remove(size_t pos, size_t N);

    `pos (length()` の大きさ以下でなければならない) バイト位置から `N` バイト、または文字列の終端までのうちどちらか短い方を削除し、自分自身への参照を返します。

      RWCString&
      replace(size_t pos, size_t N, const char* cs);

    `pos` (`length()` の大きさ以下でなければならない) バイト位置から `N` バイト、または文字列の終端までのうちどちらか短い方をヌルで終わる文字列 `cs` で置き換え、自分自身への参照を返します。この関数はヌル文字を含む `cs` 文字列に対して使えません。この関数は `cs` MBCS 文字列に対して使えない場合があります。

      RWCString&
      replace(size_t pos, size_t N1,const char* cs, size_t N2);

    `pos` (`length()` の大きさ以下でなければならない) バイト位置から `N1` バイト、または文字列の終端までのうちどちらか短い方を文字列 `cs` で置き換えます。埋め込まれたヌルを含めてちょうど `N2` バイトをコピーします。したがって、`cs` が指すバッファには少なくとも `N2` バイト長が必要です。自分自身への参照を返します。

      RWCString&
      replace(size_t pos, size_t N, const RWCString& str);

    `pos (length()` の大きさ以下でなければならない) バイト位置から `N` バイト、または文字列の終端までのうちどちらか短い方を文字列 `str` で置き換え、自分自身への参照を返します。

      RWCString&
      replace(size_t pos, size_t N1,const RWCString& str, size_t N2);

    `pos (length()` の大きさ以下でなければならない) バイト位置から `N1` バイトと、または文字列の終端までのうちどちらか短い方を、最初の `N2` バイトか `str` が示す長さのうちどちらか小さい方で置き換え、自分自身への参照を返します。

      replace(const RWCRExpr& pattern, const char* replacement,
              scopeType scope=one);
      replace(const RWCRExpr& pattern,
              const RWCString& replacement,scopeType scope=one);

    `pattern` と一致する部分文字列を置換文字列と置換します。`pattern` は新しい拡張正規表現です。`scope` は `{one, all}` のどちらかで、パターンのすべての一致を `replacement` と置換するか、または、最初に一致したものだけを置換するかを指定します。`replacement` は文字列の置換パターンです。次に例を示します。

          RWCString s("hahahohoheehee");
          s.replace(RWCRExpr("(ho)+","HAR"); // s == "hahaHARheehee"

    この関数はヌル文字を含む `const char* replacement` 文字列に対して使えません。この関数は `const char* replacement` MBCS 文字列に対して使えない場合があります。

      void
      resize(size_t n);

    自分自身の長さを `n` に変更します。必要に応じて、空白を補うか切り捨てます。

      RWCSubString
      strip(stripType s = RWCString::trailing, char c = ' ');
      const RWCSubString
      strip(stripType s = RWCString::trailing, char c = ' ')
      const;

    自分自身内の部分文字列で、その最初、最後またはその両方から文字 `c` を取り除いた部分文字列を返します。最初に記述した可変要素を左辺値として使用できます。列挙型 `stripType` は次のような値を取ります。

    `stripType` | 意味
    --- | ---
    `leading` | 文字列の最初から文字を取り除く
    `trailing` | 文字列の最後から文字を取り除く
    `both` | 文字列の最初と最後の両方から文字を取り除く

      RWCSubString
      subString(const char* cs, size_t start=0,
                caseCompare = RWCString::exact);
      const RWCSubString
      subString(const char* cs, size_t start=0,
                caseCompare = RWCString::exact) const;

    `cs` が指す、ヌル文字で終わる文字列に一致する最初の部分文字列を返します。最初に記述した可変要素は左辺値として使用できます。大文字と小文字を区別するかどうかは、`caseCompare` 引数によって決まります。デフォルトでは `RWCString::exact` です。`caseCompare` が `RWCString::ignoreCase` である場合、この関数は MBCS 文字列に対して使えません。この関数は NULL が埋め込まれた `cs` 文字列に対して使えません。この関数は `cs` MBCS 文字列に対して使えない場合があります。

      void
      toLower();

    `<ctype.h>` で宣言されている標準 C ライブラリ機能を使用して、自分自身内の大文字をすべて小文字に変換します。この関数は MBCS 文字列に対して使えません。

      void
      toUpper();

    `<ctype.h>` で宣言されている標準 C ライブラリ機能を使用して、自分自身内の小文字をすべて大文字に変換します。この関数は MBCS 文字列に対して使えません。

### 静的公開メンバー関数

      static unsigned
      hash(const RWCString& str);

    `str.hash(RWCString::exact)` により返される `str` のハッシュ値を返します。

      static size_t
      initialCapacity(size_t ic = 15);

    `RWCString` の最小初期容量を設定し、以前の値を返します。初期設定値は 15 バイトです。値が大きいと、メモリーを多く必要としますが、文字列を連結したり読み取るときにサイズ変更を行う必要が少なくなります。逆に値が小さいと、メモリーは少なくてすみますが、サイズ変更を頻繁に行うことになります。

      static size_t
      maxWaste(size_t mw = 15);

    文字列内の未使用領域の最大容量を設定し、以前の値を返します。初期設定値は 15 バイトです。`mw` 文字以上消費された場合、超過した領域は返還させられます。

      static size_t
      resizeIncrement(size_t ri = 16);

    文字列を拡張するためにさらにメモリーが必要になったとき、サイズ変更増分値を設定し、以前の値を返します。初期設定値は 16 バイトです。

### 関連の大域演算子

      RWBoolean
      operator==(const RWCString&, const char*     );
      RWBoolean
      operator==(const char*,      const RWCString&);
      RWBoolean
      operator==(const RWCString&, const RWCString&);
      RWBoolean
      operator!=(const RWCString&, const char*     );
      RWBoolean
      operator!=(const char*,      const RWCString&);
      RWBoolean
      operator!=(const RWCString&, const RWCString&);

    論理等値演算子と論理非等値演算子。大文字と小文字は区別します (`exact`)。この関数はヌル文字を含む `const char*` 文字列に対して使えません。この関数は `const char*` MBCS 文字列に対して使えない場合があります。

      RWBoolean
      operator< (const RWCString&, const char*     );
      RWBoolean
      operator< (const char*,      const RWCString&);
      RWBoolean
      operator< (const RWCString&, const RWCString&);
      RWBoolean
      operator> (const RWCString&, const char*     );
      RWBoolean
      operator> (const char*,      const RWCString&);
      RWBoolean
      operator> (const RWCString&, const RWCString&);
      RWBoolean
      operator<=(const RWCString&, const char*     );
      RWBoolean
      operator<=(const char*,      const RWCString&);
      RWBoolean
      operator<=(const RWCString&, const RWCString&);
      RWBoolean
      operator>=(const RWCString&, const char*     );
      RWBoolean
      operator>=(const char*,      const RWCString&);
      RWBoolean
      operator>=(const RWCString&, const RWCString&);

    比較は、辞書式順序でバイトごとに行われます。大文字と小文字は区別します (`exact`)。ロケールの区別はメンバー `collate()` か `strxfrm()` を使用します。この関数はヌル文字を含む `const char*` 文字列に対して使えません。この関数は `const char*` MBCS 文字列に対して使えない場合があります。

      RWCString
      operator+(const RWCString&, const RWCString&);
      RWCString
      operator+(const char*,      const RWCString&);
      RWCString
      operator+(const RWCString&, const char*     );

    連結演算子。この関数はヌル文字を含む `const char*` 文字列に対して使えません。この関数は `const char*` MBCS 文字列に対して使えない場合があります。

      ostream&
      operator<<(ostream& s, const RWCString&);

    `ostream s` に `RWCString` を出力します。

      istream&
      operator>>(istream& s, RWCString& str);

    `str.readToken(s)` を呼び出し、入力ストリーム `s` からトークンを読み取ります。この関数は MBCS 文字列に対して使えません。

      RWvostream&
      operator<<(RWvostream&, const RWCString& str);
      RWFile&
      operator<<(RWFile&,     const RWCString& str);

    仮想ストリームまたは `RWFile` に文字列 `str` を保存します。

      RWvistream&
      operator>>(RWvistream&, RWCString& str);
      RWFile&
      operator>>(RWFile&,     RWCString& str);

    それぞれ仮想ストリームまたは `RWFile` から `str` に文字列を復元し、`str` の以前の内容を書き換えます。

### 関連の大域関数

      RWCString
      strXForm(const RWCString&);

    引数文字列に `::strxfrm()` を適用した結果を返します。`RWCString::collate()` よりも高速に照合できます。`::strxfrm()` を提供するプラットフォーム上でのみ提供されます。この関数はヌル文字を含む文字列に対して使えません。

      RWCString
      toLower(const RWCString& str);

    `str` の大文字をすべて小文字に置き換えたものを返します。標準 C ライブラリ関数 `tolower()` を使用します。この関数は MBCS 文字列に対して使えません。

      RWCString
      toUpper(const RWCString& str);

    `str` の小文字をすべて大文字に置き換えたものを返します。標準 C ライブラリ関数 `toupper()` を使用します。この関数は MBCS 文字列に対して使えません。