マクロ定義 | |
#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を返す。