2005-04 / 2005-04-22

前のエントリ: 標準ライブラリのヘッダファイルはどこに? [c]
次のエントリ: zshを使ってコマンドを指定回数連続実行 [shell]

文字列を指定文字(デリミタ)で区切って、部分文字列のアドレスを得る
2005-04-22-1 / カテゴリ: [programming][c] / [permlink]

strtok(string, charset)
#include <string.h>

char string[] = "name, title, date, value\n";
char delim[] = ", \r\n";
char *token;

printf("[%s] (%p)\n", string, string);
printf("----\n");
token = strtok(string, delim);
while (token != NULL) {
  printf("[%s] (%p)\n", token, token);
  token = strtok(NULL, delim);
}
出力は
[name, title, date, value
] (0x22efa0)
----
[name] (0x22efa0)
[title] (0x22efa6)
[date] (0x22efad)
[value] (0x22efb3)
コールするたびに、デリミタで指定した文字セット以外が連続する文字列の末尾に '\0' をいれ、先頭のポインタを返す。(よって string は壊れる)
コール時に前回のポインタを記憶しているので、NULL になるまで複数回実行すれば、対象文字列をバラせる。

便利だけど、そろそろ Perl でやりたくなってきた。
前のエントリ: 標準ライブラリのヘッダファイルはどこに? [c]
次のエントリ: zshを使ってコマンドを指定回数連続実行 [shell]

2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12

最終更新時間: 2013-05-02 16:12