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

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


RWCSubString

形式

#include <rw/cstring.h>
RWCString s("test string");
s(6,3);     // "tri"

説明

このクラスは、開始位置と長さを定義することによって、RWCString の一部分を指定することができます。たとえば、7 〜 11 番目の要素 (両端含む) は、開始位置が 7 で長さが 5 です。この開始位置と長さの定義は、RWCString::strip() などの関数や正規表現を引数とする多重定義関数の呼び出し演算子を使用して行うこともできます。このクラスには公開コンストラクタがありません。このクラスは、RWCString クラスの各種関数によって作成され、ただちに破壊されます。

長さがゼロの部分文字列は、開始位置が定義されて長さがゼロの部分文字列です。これは、指定した文字の直前で始まり、その文字を含んでいない部分文字列と考えられ、左辺値として使用できます。NULL 部分文字列も有効で、要求された部分文字列が (おそらく検索で) 存在しないということを示すためによく使用されます。NULL 部分文字列はメンバー関数 isNull() で検出できますが、左辺値としては使用できません。

持続性

なし

#include <rw/cstring.h>
#include <rw/rstream.h>
main() {
  RWCString s("What I tell you is true.");
  //  部分文字列を作成し、左辺値として使用する:
  s(19, 0) = "three times ";
  cout << s << endl;
}

プログラム出力:

What I tell you is three times true.

代入演算子

RWCSubString&
operator=(const RWCString&);

RWCString への代入。文は次のようになります。

RWCString a;
RWCString b;
...
b(2, 3) = a;

これは、a のデータを部分文字列 b(2,3) へコピーします。要素の数は一致する必要はありません。異なる場合は、b のサイズが適切に変更されます。自分自身のサイズを、代入した RWCString の長さだけ伸ばします。自分自身が NULL 部分文字列であれば、これらの文は何も行いません。自分自身への参照を返します。

RWCSubString&
operator=(const RWCSubString&);

RWCSubString への代入。文は次のようになります。

RWCString a;
RWCString b;
...
b(2, 3) = a(5,5);

これは、a のデータの 5 文字を部分文字列 b(2,3) へコピーします。要素の数は一致する必要はありません。異なる場合は、b のサイズが適切に変更されます。自分自身のサイズを、代入した RWCSubString の長さだけ伸ばします。自分自身が NULL 部分文字列であれば、これらの文は何も行いません。自分自身への参照を返します。

RWCSubString&
operator=(const char*);

文字列への代入。例は次のようになります。

    RWCString str("Mary had a lamb");
    char dat[] = "Perrier";
    str(11,4) = dat;  // "Mary had a Perrier"

選択される文字数は一致する必要はありません。異なる場合は、str のサイズが適切に変更されます。自分自身のサイズを、代入した文字列の strlen() だけ長くします。自分自身が NULL 部分文字列であれば、これらの文は何も行いません。自分自身への参照を返します。

インデックス付け演算子

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

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

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

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

公開メンバー関数

RWBoolean
isNull() const;

NULL 部分文字列の場合、TRUE を返します。

size_t
length() const;

RWCSubString の長さを返します。

RWBoolean
operator!() const;

NULL 部分文字列の場合、TRUE を返します。

size_t
start() const;

RWCSubString の開始要素を返します。

void
toLower();

自分自身内の大文字をすべて小文字に変換します。標準 C ライブラリ関数 tolower() を使用します。

void
toUpper();

自分自身内の小文字をすべて大文字に変換します。標準 C ライブラリ関数 toupper() を使用します。

大域論理演算子

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

部分文字列が文字列もしくは RWCString 引数と辞書式順序で等しければ、TRUE を返します。大文字と小文字は区別します (exact)。

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

それぞれ、operator==() の否定を返します。