C言語で任意の区切り文字で文字列を分割する
string.h
の strtok()
を使用すると任意の区切り文字で文字列を分割する事ができるんですが、その使い方が結構ぶっ飛んでて面白かった。
[コード]
#include <stdio.h> #include <string.h> int main(){ char str[] = "homu,mami,mado"; char* tp; /* 最初に見つかった区切り文字(",")に "\0" を挿入する */ tp = strtok(str, ","); printf("%s\n", str); /* strtok() の戻り値は最初のトークンの位置 */ printf("%s\n", tp); /* 第一引数に NULL を指定すると前回の str 値の続きから始める */ /* strtok() の戻り値は次のトークンの位置 */ /* 区切り文字が見つからなかったら NULL が返ってくる */ while( tp = strtok(NULL, ",") ){ printf("%s\n", tp); } return 0; }
[出力]
homu homu mami mado
最初にこの関数の概要を見た時に『C言語でどうやって分割した文字列を返すのだろう?』と思ったら『この関数が NULL を返すまで連続的に呼び出す』という仕様でした。
いやー、久々に C言語っぽい関数を見た気がする。
元の文字列に NULL を挿入する副作用があるんですが、使いどころはありそうな気もする。