マクロ定義 | |
| #define | CSTL_STRING_INTERFACE(Name, Type) |
| インターフェイスマクロ | |
| #define | CSTL_STRING_IMPLEMENT(Name, Type) |
| 実装マクロ | |
| #define | CSTL_NPOS ((size_t)-1) |
| NPOS | |
型定義 | |
| typedef struct String | String |
| stringの型 | |
関数 | |
| String * | String_new (void) |
| 生成 | |
| String * | String_new_reserve (size_t n) |
| 許容量を予約して生成 | |
| String * | String_new_assign (const CharT *cstr) |
| C の文字列で初期化して生成 | |
| String * | String_new_assign_len (const CharT *chars, size_t chars_len) |
| 文字の配列で初期化して生成 | |
| String * | String_new_assign_c (size_t n, CharT c) |
| 文字で初期化して生成 | |
| 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) |
| C の文字列を取得 | |
| const CharT * | String_data (String *self) |
| 文字の配列を取得 | |
| String * | String_assign (String *self, const CharT *cstr) |
| C の文字列を代入 | |
| String * | String_assign_len (String *self, const CharT *chars, size_t chars_len) |
| 文字の配列を代入 | |
| String * | String_assign_c (String *self, size_t n, CharT c) |
| 文字を代入 | |
| String * | String_append (String *self, const CharT *cstr) |
| C の文字列を追加 | |
| String * | String_append_len (String *self, const CharT *chars, size_t chars_len) |
| 文字の配列を追加 | |
| String * | String_append_c (String *self, size_t n, CharT c) |
| 文字を追加 | |
| String * | String_push_back (String *self, CharT c) |
| 1文字を追加 | |
| String * | String_insert (String *self, size_t idx, const CharT *cstr) |
| C の文字列を挿入 | |
| String * | String_insert_len (String *self, size_t idx, const CharT *chars, size_t chars_len) |
| 文字の配列を挿入 | |
| String * | String_insert_c (String *self, size_t idx, size_t n, CharT c) |
| 文字を挿入 | |
| String * | String_replace (String *self, size_t idx, size_t len, const CharT *cstr) |
| C の文字列で置換 | |
| String * | String_replace_len (String *self, size_t idx, size_t len, const CharT *chars, size_t chars_len) |
| 文字の配列で置換 | |
| String * | String_replace_c (String *self, size_t idx, size_t len, size_t n, CharT c) |
| 文字で置換 | |
| String * | String_erase (String *self, size_t idx, size_t len) |
| 文字を削除 | |
| void | String_pop_back (String *self) |
| 最後の文字を削除 | |
| 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 (String *self, const CharT *cstr, size_t idx) |
| C の文字列を検索 | |
| size_t | String_find_len (String *self, const CharT *chars, size_t idx, size_t chars_len) |
| 文字の配列を検索 | |
| size_t | String_find_c (String *self, CharT c, size_t idx) |
| 文字を検索 | |
| size_t | String_rfind (String *self, const CharT *cstr, size_t idx) |
| C の文字列を後ろから検索 | |
| size_t | String_rfind_len (String *self, const CharT *chars, size_t idx, size_t chars_len) |
| 文字の配列を後ろから検索 | |
| size_t | String_rfind_c (String *self, CharT c, size_t idx) |
| 文字を後ろから検索 | |
| size_t | String_find_first_of (String *self, const CharT *cstr, size_t idx) |
| C の文字列に含まれる最初の文字を検索 | |
| size_t | String_find_first_of_len (String *self, const CharT *chars, size_t idx, size_t chars_len) |
| 文字の配列に含まれる最初の文字を検索 | |
| size_t | String_find_first_of_c (String *self, CharT c, size_t idx) |
| 指定文字の最初の位置を検索 | |
| size_t | String_find_last_of (String *self, const CharT *cstr, size_t idx) |
| C の文字列に含まれる最後の文字を検索 | |
| size_t | String_find_last_of_len (String *self, const CharT *chars, size_t idx, size_t chars_len) |
| 文字の配列に含まれる最後の文字を検索 | |
| size_t | String_find_last_of_c (String *self, CharT c, size_t idx) |
| 指定文字の最後の位置を検索 | |
| size_t | String_find_first_not_of (String *self, const CharT *cstr, size_t idx) |
| C の文字列に含まれない最初の文字を検索 | |
| size_t | String_find_first_not_of_len (String *self, const CharT *chars, size_t idx, size_t chars_len) |
| 文字の配列に含まれない最初の文字を検索 | |
| size_t | String_find_first_not_of_c (String *self, CharT c, size_t idx) |
| 指定文字以外の文字の最初の位置を検索 | |
| size_t | String_find_last_not_of (String *self, const CharT *cstr, size_t idx) |
| C の文字列に含まれない最後の文字を検索 | |
| size_t | String_find_last_not_of_len (String *self, const CharT *chars, size_t idx, size_t chars_len) |
| 文字の配列に含まれない最後の文字を検索 | |
| size_t | String_find_last_not_of_c (String *self, CharT c, size_t idx) |
| 指定文字以外の文字の最後の位置を検索 | |
stringを使うには、<cstl/string.h>をインクルードし、以下のマクロを用いてコードを展開する必要がある。
#include <cstl/string.h> #define CSTL_STRING_INTERFACE(Name, Type) #define CSTL_STRING_IMPLEMENT(Name, Type)
CSTL_STRING_INTERFACE() は任意の名前と文字の型のstringのインターフェイスを展開する。 CSTL_STRING_IMPLEMENT() はその実装を展開する。
また、CSTL_STRING_INTERFACE() を展開する前に、<cstl/algorithm.h>をインクルードすることにより、 アルゴリズムが使用可能となる。
#include <stdio.h> #include <string.h> #include <ctype.h> #include <cstl/string.h> CSTL_STRING_INTERFACE(String, char) /* インターフェイスを展開 */ CSTL_STRING_IMPLEMENT(String, char) /* 実装を展開 */ int main(void) { size_t i; size_t pos; const char *p; /* stringを生成。 * 型名・関数のプレフィックスはStringとなる。 */ String *str = String_new(); /* 代入 */ String_assign(str, "string"); /* 末尾に追加 */ String_append(str, " example"); /* 先頭に挿入 */ String_insert(str, 0, "a "); /* Cの文字列として出力 */ printf("%s\n", String_c_str(str)); for (i = 0; i < String_length(str); i++) { /* インデックスによる文字の読み書き */ printf("%c, ", *String_at(str, i)); *String_at(str, i) = toupper(*String_at(str, i)); printf("%c\n", *String_at(str, i)); } /* 検索して置換 */ p = "EX"; pos = String_find(str, p, 0); if (pos != CSTL_NPOS) { String_replace(str, pos, strlen(p), "S"); } printf("%s\n", String_c_str(str)); /* 使い終わったら破棄 */ String_delete(str); return 0; }
| #define CSTL_STRING_INTERFACE | ( | Name, | |||
| Type | ) |
インターフェイスマクロ
任意の名前と文字の型のstringのインターフェイスを展開する。
| Name | 既存の型と重複しない任意の名前。stringの型名と関数のプレフィックスになる | |
| Type | 任意の文字の型 |
Type に括弧を付けないこと。
| #define CSTL_STRING_IMPLEMENT | ( | Name, | |||
| Type | ) |
実装マクロ
CSTL_STRING_INTERFACE()で展開したインターフェイスの実装を展開する。
| Name | 既存の型と重複しない任意の名前。stringの型名と関数のプレフィックスになる | |
| Type | 任意の文字の型 |
Type に括弧を付けないこと。
| #define CSTL_NPOS ((size_t)-1) |
NPOS
size_t型の最大値。 検索関数において、検索に失敗した時に返される。
stringの型
抽象データ型となっており、内部データメンバは非公開である。
以下、 String_new*() から返されたString構造体へのポインタをstringオブジェクトという。
| String* String_new | ( | void | ) |
生成
文字数が0のstringを生成する。
メモリ不足の場合、NULLを返す。
| String* String_new_reserve | ( | size_t | n | ) |
許容量を予約して生成
許容量(内部メモリの再割り当てを行わずに格納できる文字数)がn 個、 文字数が0のstringを生成する。
| n | 許容量 |
メモリ不足の場合、NULLを返す。
| String* String_new_assign | ( | const CharT * | cstr | ) |
C の文字列で初期化して生成
cstr で初期化されたstringを生成する。
| cstr | C の文字列 |
メモリ不足の場合、NULLを返す。
| String* String_new_assign_len | ( | const CharT * | chars, | |
| size_t | chars_len | |||
| ) |
文字の配列で初期化して生成
chars からchars_len 個の文字で初期化されたstringを生成する。
| chars | 文字の配列 | |
| chars_len | chars の長さ |
メモリ不足の場合、NULLを返す。
| String* String_new_assign_c | ( | size_t | n, | |
| CharT | c | |||
| ) |
文字で初期化して生成
n 個のc で初期化されたstringを生成する。
| n | c の個数 | |
| c | 文字 |
メモリ不足の場合、NULLを返す。
| void String_delete | ( | String * | self | ) |
破棄
self を破棄する。 self がNULLの場合、何もしない。
| self | stringオブジェクト |
| size_t String_size | ( | String * | self | ) |
| size_t String_length | ( | String * | self | ) |
| int String_empty | ( | String * | self | ) |
空チェック
| self | stringオブジェクト |
self の文字数が1以上の場合、0を返す。
| size_t String_capacity | ( | String * | self | ) |
許容量を取得
| self | stringオブジェクト |
| int String_reserve | ( | String * | self, | |
| size_t | n | |||
| ) |
許容量を予約
self の許容量を文字n 個の領域に拡張する。 self が持つ文字は維持され、拡張した領域の初期化はしない。
| self | stringオブジェクト | |
| n | 許容量 |
n がself の現在の許容量以下の場合、self の変更を行わず非0を返す。
メモリ不足の場合、self の変更を行わず0を返す。
| void String_shrink | ( | String * | self, | |
| size_t | n | |||
| ) |
許容量を縮小
self の許容量を文字n 個の領域に縮小する。 n がself の現在の文字数以下の場合、self の許容量を文字数と同じにする。 n がself の現在の許容量以上の場合、何もしない。
| self | stringオブジェクト | |
| n | 許容量 |
比較
self とx の文字列を比較する。
| self | stringオブジェクト | |
| x | self と比較するstringオブジェクト |
| 0 | 文字列が等しい場合 | |
| 負の値 | self がx より辞書順位で小さい場合 | |
| 正の値 | self がx より辞書順位で大きい場合 |
| CharT* String_at | ( | String * | self, | |
| size_t | idx | |||
| ) |
インデックスによる文字のアクセス
| self | stringオブジェクト | |
| idx | インデックス |
| const CharT* String_c_str | ( | String * | self | ) |
C の文字列を取得
| self | stringオブジェクト |
| const CharT* String_data | ( | String * | self | ) |
文字の配列を取得
| self | stringオブジェクト |
戻り値はself の変更により無効となる。
C の文字列を代入
self にcstr を代入する。 cstr はself 内の文字列でもよい。
| self | stringオブジェクト | |
| cstr | C の文字列 |
メモリ不足の場合、self の変更を行わずNULLを返す。
文字の配列を代入
self にchars からchars_len 個の文字を代入する。 chars はself 内の文字の配列でもよい。
| self | stringオブジェクト | |
| chars | 文字の配列 | |
| chars_len | chars の長さ |
メモリ不足の場合、self の変更を行わずNULLを返す。
文字を代入
self にn 個のc を代入する。
| self | stringオブジェクト | |
| n | c の個数 | |
| c | 文字 |
メモリ不足の場合、self の変更を行わずNULLを返す。
C の文字列を追加
self の末尾に、cstr を追加する。 cstr はself 内の文字列でもよい。
| self | stringオブジェクト | |
| cstr | C の文字列 |
メモリ不足の場合、self の変更を行わずNULLを返す。
文字の配列を追加
self の末尾に、chars からchars_len 個の文字を追加する。 chars はself 内の文字の配列でもよい。
| self | stringオブジェクト | |
| chars | 文字の配列 | |
| chars_len | chars の長さ |
メモリ不足の場合、self の変更を行わずNULLを返す。
文字を追加
self の末尾に、n 個のc を追加する。
| self | stringオブジェクト | |
| n | c の個数 | |
| c | 文字 |
メモリ不足の場合、self の変更を行わずNULLを返す。
1文字を追加
self の末尾に、c を追加する。
| self | stringオブジェクト | |
| c | 文字 |
メモリ不足の場合、self の変更を行わずNULLを返す。
C の文字列を挿入
self のidx 番目の位置に、cstr を挿入する。 cstr はself 内の文字列でもよい。
| self | stringオブジェクト | |
| idx | 挿入する位置 | |
| cstr | C の文字列 |
メモリ不足の場合、self の変更を行わずNULLを返す。
cstr がNULLでないこと。
文字の配列を挿入
self のidx 番目の位置に、chars からchars_len 個の文字を挿入する。 chars はself 内の文字の配列でもよい。
| self | stringオブジェクト | |
| idx | 挿入する位置 | |
| chars | 文字の配列 | |
| chars_len | chars の長さ |
メモリ不足の場合、self の変更を行わずNULLを返す。
chars がNULLでないこと。
文字を挿入
self のidx 番目の位置に、n 個のc を挿入する。
| self | stringオブジェクト | |
| idx | 挿入する位置 | |
| n | c の個数 | |
| c | 文字 |
メモリ不足の場合、self の変更を行わずNULLを返す。
C の文字列で置換
self のidx 番目から最大len 個の文字を、cstr で置換する。 cstr はself 内の文字列でもよい。
| self | stringオブジェクト | |
| idx | 置換開始インデックス | |
| len | idx からの長さ | |
| cstr | C の文字列 |
メモリ不足の場合、self の変更を行わずNULLを返す。
cstr がNULLでないこと。
| String* String_replace_len | ( | String * | self, | |
| size_t | idx, | |||
| size_t | len, | |||
| const CharT * | chars, | |||
| size_t | chars_len | |||
| ) |
文字の配列で置換
self のidx 番目から最大len 個の文字を、chars からchars_len 個の文字で置換する。 chars はself 内の文字の配列でもよい。
| self | stringオブジェクト | |
| idx | 置換開始インデックス | |
| len | idx からの長さ | |
| chars | 文字の配列 | |
| chars_len | chars の長さ |
メモリ不足の場合、self の変更を行わずNULLを返す。
chars がNULLでないこと。
idx + len がself の文字数より大きい場合、self のidx 番目から末尾までが置換される。
文字で置換
self のidx 番目から最大len 個の文字を、n 個のc で置換する。
| self | stringオブジェクト | |
| idx | 置換開始インデックス | |
| len | idx からの長さ | |
| n | c の個数 | |
| c | 文字 |
メモリ不足の場合、self の変更を行わずNULLを返す。
文字を削除
self のidx 番目の文字から最大len 個の文字を削除する。
| self | stringオブジェクト | |
| idx | 削除開始インデックス | |
| len | idx からの長さ |
| void String_pop_back | ( | String * | self | ) |
最後の文字を削除
self の最後の文字を削除する。
| self | stringオブジェクト |
| void String_clear | ( | String * | self | ) |
全文字を削除
self のすべての文字を削除する。
| self | stringオブジェクト |
| int String_resize | ( | String * | self, | |
| size_t | n, | |||
| CharT | c | |||
| ) |
文字数を変更
self の文字数をn 個に変更する。 n がself の現在の文字数以下の場合、文字数がn 個になるまで末尾から文字が削除される。 n がself の現在の文字数より大きい場合、文字数がn 個になるまでc が末尾から挿入される。
| self | stringオブジェクト | |
| n | 文字数 | |
| c | 文字 |
メモリ不足の場合、self の変更を行わず0を返す。
交換
self とx の内容を交換する。
| self | stringオブジェクト | |
| x | self と内容を交換するstringオブジェクト |
| size_t String_find | ( | String * | self, | |
| const CharT * | cstr, | |||
| size_t | idx | |||
| ) |
C の文字列を検索
self のidx 番目から末尾までの範囲で、cstr が現れる最初の位置を検索する。
| self | stringオブジェクト | |
| cstr | C の文字列 | |
| idx | 検索開始インデックス |
検索に失敗した場合、CSTL_NPOSを返す。
| size_t String_find_len | ( | String * | self, | |
| const CharT * | chars, | |||
| size_t | idx, | |||
| size_t | chars_len | |||
| ) |
文字の配列を検索
self のidx 番目から末尾までの範囲で、chars からchars_len 個の文字が現れる最初の位置を検索する。
| self | stringオブジェクト | |
| chars | 文字の配列 | |
| idx | 検索開始インデックス | |
| chars_len | chars の長さ |
検索に失敗した場合、CSTL_NPOSを返す。
| size_t String_find_c | ( | String * | self, | |
| CharT | c, | |||
| size_t | idx | |||
| ) |
文字を検索
self のidx 番目から末尾までの範囲で、c が現れる最初の位置を検索する。
| self | stringオブジェクト | |
| c | 文字 | |
| idx | 検索開始インデックス |
検索に失敗した場合、CSTL_NPOSを返す。
| size_t String_rfind | ( | String * | self, | |
| const CharT * | cstr, | |||
| size_t | idx | |||
| ) |
C の文字列を後ろから検索
self の先頭からidx - 1番目までの範囲で、cstr が現れる最後の位置を検索する。
| self | stringオブジェクト | |
| cstr | C の文字列 | |
| idx | 検索開始インデックス |
検索に失敗した場合、CSTL_NPOSを返す。
| size_t String_rfind_len | ( | String * | self, | |
| const CharT * | chars, | |||
| size_t | idx, | |||
| size_t | chars_len | |||
| ) |
文字の配列を後ろから検索
self の先頭からidx - 1番目までの範囲で、chars からchars_len 個の文字が現れる最後の位置を検索する。
| self | stringオブジェクト | |
| chars | 文字の配列 | |
| idx | 検索開始インデックス | |
| chars_len | chars の長さ |
検索に失敗した場合、CSTL_NPOSを返す。
| size_t String_rfind_c | ( | String * | self, | |
| CharT | c, | |||
| size_t | idx | |||
| ) |
文字を後ろから検索
self の先頭からidx - 1番目までの範囲で、c が現れる最後の位置を検索する。
| self | stringオブジェクト | |
| c | 文字 | |
| idx | 検索開始インデックス |
検索に失敗した場合、CSTL_NPOSを返す。
| size_t String_find_first_of | ( | String * | self, | |
| const CharT * | cstr, | |||
| size_t | idx | |||
| ) |
C の文字列に含まれる最初の文字を検索
self のidx 番目から末尾までの範囲で、cstr に含まれる最初の文字が現れる位置を検索する。
| self | stringオブジェクト | |
| cstr | C の文字列 | |
| idx | 検索開始インデックス |
検索に失敗した場合、CSTL_NPOSを返す。
| size_t String_find_first_of_len | ( | String * | self, | |
| const CharT * | chars, | |||
| size_t | idx, | |||
| size_t | chars_len | |||
| ) |
文字の配列に含まれる最初の文字を検索
self のidx 番目から末尾までの範囲で、chars からchars_len 個の文字に含まれる最初の文字が現れる位置を検索する。
| self | stringオブジェクト | |
| chars | 文字の配列 | |
| idx | 検索開始インデックス | |
| chars_len | chars の長さ |
検索に失敗した場合、CSTL_NPOSを返す。
| size_t String_find_first_of_c | ( | String * | self, | |
| CharT | c, | |||
| size_t | idx | |||
| ) |
指定文字の最初の位置を検索
self のidx 番目から末尾までの範囲で、c が現れる最初の位置を検索する。
| self | stringオブジェクト | |
| c | 文字 | |
| idx | 検索開始インデックス |
検索に失敗した場合、CSTL_NPOSを返す。
| size_t String_find_last_of | ( | String * | self, | |
| const CharT * | cstr, | |||
| size_t | idx | |||
| ) |
C の文字列に含まれる最後の文字を検索
self の先頭からidx - 1番目までの範囲で、cstr に含まれる最後の文字が現れる位置を検索する。
| self | stringオブジェクト | |
| cstr | C の文字列 | |
| idx | 検索開始インデックス |
検索に失敗した場合、CSTL_NPOSを返す。
| size_t String_find_last_of_len | ( | String * | self, | |
| const CharT * | chars, | |||
| size_t | idx, | |||
| size_t | chars_len | |||
| ) |
文字の配列に含まれる最後の文字を検索
self の先頭からidx - 1番目までの範囲で、chars からchars_len 個の文字に含まれる最後の文字が現れる位置を検索する。
| self | stringオブジェクト | |
| chars | 文字の配列 | |
| idx | 検索開始インデックス | |
| chars_len | chars の長さ |
検索に失敗した場合、CSTL_NPOSを返す。
| size_t String_find_last_of_c | ( | String * | self, | |
| CharT | c, | |||
| size_t | idx | |||
| ) |
指定文字の最後の位置を検索
self の先頭からidx - 1番目までの範囲で、c が現れる最後の位置を検索する。
| self | stringオブジェクト | |
| c | 文字 | |
| idx | 検索開始インデックス |
検索に失敗した場合、CSTL_NPOSを返す。
| size_t String_find_first_not_of | ( | String * | self, | |
| const CharT * | cstr, | |||
| size_t | idx | |||
| ) |
C の文字列に含まれない最初の文字を検索
self のidx 番目から末尾までの範囲で、cstr に含まれない最初の文字が現れる位置を検索する。
| self | stringオブジェクト | |
| cstr | C の文字列 | |
| idx | 検索開始インデックス |
検索に失敗した場合、CSTL_NPOSを返す。
| size_t String_find_first_not_of_len | ( | String * | self, | |
| const CharT * | chars, | |||
| size_t | idx, | |||
| size_t | chars_len | |||
| ) |
文字の配列に含まれない最初の文字を検索
self のidx 番目から末尾までの範囲で、chars からchars_len 個の文字に含まれない最初の文字が現れる位置を検索する。
| self | stringオブジェクト | |
| chars | 文字の配列 | |
| idx | 検索開始インデックス | |
| chars_len | chars の長さ |
検索に失敗した場合、CSTL_NPOSを返す。
| size_t String_find_first_not_of_c | ( | String * | self, | |
| CharT | c, | |||
| size_t | idx | |||
| ) |
指定文字以外の文字の最初の位置を検索
self のidx 番目から末尾までの範囲で、c 以外の文字が現れる最初の位置を検索する。
| self | stringオブジェクト | |
| c | 文字 | |
| idx | 検索開始インデックス |
検索に失敗した場合、CSTL_NPOSを返す。
| size_t String_find_last_not_of | ( | String * | self, | |
| const CharT * | cstr, | |||
| size_t | idx | |||
| ) |
C の文字列に含まれない最後の文字を検索
self の先頭からidx - 1番目までの範囲で、cstr に含まれない最後の文字が現れる位置を検索する。
| self | stringオブジェクト | |
| cstr | C の文字列 | |
| idx | 検索開始インデックス |
検索に失敗した場合、CSTL_NPOSを返す。
| size_t String_find_last_not_of_len | ( | String * | self, | |
| const CharT * | chars, | |||
| size_t | idx, | |||
| size_t | chars_len | |||
| ) |
文字の配列に含まれない最後の文字を検索
self の先頭からidx - 1番目までの範囲で、chars からchars_len 個の文字に含まれない最後の文字が現れる位置を検索する。
| self | stringオブジェクト | |
| chars | 文字の配列 | |
| idx | 検索開始インデックス | |
| chars_len | chars の長さ |
検索に失敗した場合、CSTL_NPOSを返す。
| size_t String_find_last_not_of_c | ( | String * | self, | |
| CharT | c, | |||
| size_t | idx | |||
| ) |
指定文字以外の文字の最後の位置を検索
self の先頭からidx - 1番目までの範囲で、c 以外の文字が現れる最後の位置を検索する。
| self | stringオブジェクト | |
| c | 文字 | |
| idx | 検索開始インデックス |
検索に失敗した場合、CSTL_NPOSを返す。