• ベストアンサー

文字列を任意の場所で分割(split)したい

CでCGIを書く上で、perlのsplit命令の代替になるようなライブラリを探しています。 www=xxx&yyy=zzz という引数をchar型の配列に入れ、それを & で分割し、次に = で分割して query[0].name = www; query[0].value = xxx query[1].name = yyy; query[1].value = zzz などと、perlと同等のことをさせたいのですが、文字列をその都度走査していたのでは処理が莫大になりそうなので、もしご存知であれば教えていただければと思います。

質問者が選んだベストアンサー

  • ベストアンサー
  • mkii
  • ベストアンサー率40% (43/105)
回答No.1

strtokがありますが、結局自分で少しは書かなくてはいけないと思います。 ちょっとCで書いてみました。関数化すればよいと思います。 struct QUERY { char *name; char *value; }; void XXX() { char *kari = "www=xxx&yyy=zzz"; char qbuf[128]; strcpy(qbuf, kari); struct QUERY *query; char *p; int count = 1; for (p = qbuf; *p != '\0'; p ++) { if (*p == '&') count ++; } query = (struct QUERY *)malloc(sizeof(struct QUERY) * count); count = 0; query[0].name = qbuf; for (p = qbuf; *p != '\0'; p ++) { if (*p == '=') { *p = '\0'; query[count].value = p + 1; } else if (*p == '&') { *p = '\0'; count ++; query[count].name = p + 1; } } free(query); }

pythian
質問者

お礼

ポインタを受け付けない硬い頭によく効きました。 無事に動作して、関数化、組み込みができました。ありがとうございます。

関連するQ&A

専門家に質問してみよう