string

stringを使うには、string.hというヘッダファイルをインクルードする。

#include <cstl/string.h>

以下のマクロを用いてコードを展開する必要がある。

/* インターフェイスを展開 */
#define CSTL_STRING_INTERFACE(Name, Type)

/* 実装を展開 */
#define CSTL_STRING_IMPLEMENT(Name, Type)

Nameに既存の型と重複しない任意の名前を、Typeに任意の文字の型を指定する。


CSTL_STRING_INTERFACEの引数のNameにString, TypeにCharTを指定した場合、 以下のインターフェイスを提供する。

定数

#define CSTL_NPOS  ((size_t)-1)

String

コンテナの型。抽象データ型となっており、以下の関数によってのみアクセスできる。

関数

以下の関数において、String*型の引数はNULLでないことを事前条件に含める。

生成
String *String_new(size_t n);

破棄
void String_delete(String *self);

サイズ
size_t String_size(String *self);

size_t String_length(String *self);

int String_empty(String *self);

許容量
size_t String_capacity(String *self);

int String_reserve(String *self, size_t n);

void String_shrink(String *self, size_t n);

比較
int String_compare(String *self, String *x);

文字のアクセス
CharT *String_at(String *self, size_t idx);

const CharT *String_c_str(String *self);

代入
int String_assign(String *self, const CharT *cstr, size_t cstr_len);

int String_assign_c(String *self, size_t n, CharT c);

追加
int String_append(String *self, const CharT *cstr, size_t cstr_len);

int String_append_c(String *self, size_t n, CharT c);

int String_push_back(String *self, CharT c);

挿入
int String_insert(String *self, size_t idx, const CharT *cstr, size_t cstr_len);

int String_insert_c(String *self, size_t idx, size_t n, CharT c);

置換
int String_replace(String *self, size_t idx, size_t len, const CharT *cstr, size_t cstr_len);

int String_replace_c(String *self, size_t idx, size_t len, size_t n, CharT c);

削除
void String_erase(String *self, size_t idx, size_t len);

void String_clear(String *self);

サイズの変更
int String_resize(String *self, size_t n, CharT c);

交換
void String_swap(String *self, String *x);

検索
size_t String_find(const CharT *x, const CharT *cstr, size_t idx, size_t cstr_len);

size_t String_find_c(const CharT *x, CharT c, size_t idx);

size_t String_rfind(const CharT *x, const CharT *cstr, size_t idx, size_t cstr_len);

size_t String_rfind_c(const CharT *x, CharT c, size_t idx);

size_t String_find_first_of(const CharT *x, const CharT *cstr, size_t idx, size_t cstr_len);

size_t String_find_first_of_c(const CharT *x, CharT c, size_t idx);

size_t String_find_last_of(const CharT *x, const CharT *cstr, size_t idx, size_t cstr_len);

size_t String_find_last_of_c(const CharT *x, CharT c, size_t idx);

size_t String_find_first_not_of(const CharT *x, const CharT *cstr, size_t idx, size_t cstr_len);

size_t String_find_first_not_of_c(const CharT *x, CharT c, size_t idx);

size_t String_find_last_not_of(const CharT *x, const CharT *cstr, size_t idx, size_t cstr_len);

size_t String_find_last_not_of_c(const CharT *x, CharT c, size_t idx);