C で split をどう書くかという、昭和時代の自転車置き場の議論
でまあというわけで split/join とかしたい時は 99% 速度なんて気にしてないという法則から、普通に vector
split/join - はじめてのにき(2009-03-17)かえす split がとりあえずあったりいいんじゃないかなぁとか思うわけです。
C++ の場合であれば 100% 同意です。ただ、good old な C 言語の場合はどうするのがいいのかな、と思ったのでした。メモリ確保したりしたら、解放めんどくさいし。で、自分だったら、
size_t split_str(char *s, int split_char, char **list, size_t max_count) { size_t count = 0; if (count < max_count) list[count] = s; count++; for (; *s != '\0'; s++) { if (*s == split_char) { *s = '\0'; if (count < max_count) list[count] = s + 1; count++; } } return count; } ... #define MAX_COLS 100 char *cols[MAX_COLS]; size_t ncols = split_str(buf, ',', cols, MAX_COLS); if (ncols > MAX_COLS) return -1; for (i = 0; i < ncols; i++) ...
みたく書くのかなぁ、と。パースするデータはほとんどの場合、fgets とかで読んでる=破壊可能だろうから、これでヒープ不要じゃん、みたいな。
こういうどうでもいいことが気になるなんて、C はなんて素敵な言語なんだ、と思います (自転車置き場的な意味で) 。全然役にたたない話ですね。すみません。