OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • 困ってます
  • 質問No.108329
  • 閲覧数150
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 88% (361/410)

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と同等のことをさせたいのですが、文字列をその都度走査していたのでは処理が莫大になりそうなので、もしご存知であれば教えていただければと思います。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル9

ベストアンサー率 40% (43/105)

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

お礼率 88% (361/410)

ポインタを受け付けない硬い頭によく効きました。
無事に動作して、関数化、組み込みができました。ありがとうございます。
投稿日時 - 2001-07-25 12:34:58
-PR-
-PR-
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ