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()は、stringdelimiter を渡すと、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;

}