split_text の Manpage風解説
名前
split_text, freesplitedtext, search_delimiter - 文字列を区切り文字で分割する
書式
int split_text (const char *string, const char *delimiter, struct splitedtext **res); int freesplitedtext (struct splitedtext *res); int search_delimiter (const char *string, const char *delimiter);
説明
split_text()は、string と delimiter を渡すと、1つ以上の splitedtext 構造体を返す。それぞれの splitedtext 構造体には分割された文字列が格納されている。
split_text()が用いる splitedtext 構造体は以下のフィールドを含む。
struct splitedtext { char *string; struct splitedtext *next; };
string 引数は、分割対象の文字列を指定し、delimiter には区切り文字を指定する。
split_text() 関数は、splitedtext 構造体のメモリ確保を行い、splitedtext 構造体のリンクリストを初期化し、res にリストの先頭へのポインタを入れて返す。 このとき、各構造体の string フィールドには分割された文字列が格納される 。リンクリストの要素は next フィールドにより連結される。
freesplitedtext() 関数は、 リンクリスト res に対して動的に割り当てられたメモリを解放する。
search_delimiter() 関数は、string で指定された文字列の最初に出現する delimiter 文字列の位置を返す(delimiter が見つからなかった場合は -1 を返す)。
返り値
split_text()関数は分割した回数を返す。
search_delimiter()関数は、delimiter の出現位置を返し、見つからなかった場合は -1 を返す。
例
以下の例は、標準入力から分割対象文字列と区切り文字を受け取って、分割結果を出力する。
/** * split_text_test.c * splite_text()のテスト用コード */ #include <stdio.h> #include "split_text.h" int main (int argv, char *argc[]) { char *string, *delimiter; struct splitedtext *res, *rp; if (argv < 3) { return 1; } string = argc[1]; delimiter = argc[2]; split_text(string, delimiter, &res); for (rp = res; rp != NULL ; rp=rp->next) { printf("%s\n", rp->string); } freesplitedtext(res); return 0; }