電子書籍の厳選無料作品が豊富!

C言語を学習しているものです。
main関数内で定義した

"<pro><name>chad smith</name><id>1234</id><live>America<live></pro>"

を抽出し表示するプログラムの作成を考えております。
第一パラメータに抽出したいタグ名を書くと表示されるようにします。

>>プログラム名 id

1234

>>プログラム名 name

chad smith

>>プログラム名 pro

<name>chad smith</name><id>1234</id><live>America<live>

のような表示にされるようにします。
自分なりに考えてみましたが結果がうまくいかないため質問させて頂きます。


#include<stdio.h>
#include<string.h>
#define BUF 256

int main(int argc ,char *argv[])
{
char str1[]="<pro><name>chad smith</name><id>1234</id><live>America<live></pro>";
char str2[BUF];


printf("%s",&str2[0]);



return 0;
}

上記のプログラムに対して自分なりにstrstr()とmemcpy()を使用してみましたがうまくいきませんでした。

strstr()を用いますと文字列の最初から検索していきますが
第一パラメータでタグ名だけを宣言しますので
前半の<○○>に辿りつきますが、後半の</○○>に辿りつけません。

何か良い対策がありましたらよろしくお願いいたします。

A 回答 (1件)

質問するカテゴリは


[技術者向] コンピューター > プログラミング > C&C++
の方が良いです。

> 前半の<○○>に辿りつきますが、後半の</○○>に辿りつけません。

ひょっとして、「strstr(str1, str2)」というようにしか書いていないのでしょうか?
後半のタグの検索には、str1の代わりに最初のタグ以降のポインタを入れてやらないといけません。
一応、使用例をつけておきます。
念のためいっておきますが、ご質問の仕様も満たしていないし、同じタグが入れ子になっていた場合にも対応していないし、更に入力にscanfも使用していますので、完成されたソースではありません。
後はご自分で完成させてみてください。
わからないところがあれば、補足してください。

#include<stdio.h>
#include<string.h>

#define BUF 256

int main(int argc ,char *argv[])
{
char str1[]="<pro><name>chad smith</name><id>1234</id><live>America<live></pro>";
char str2[BUF];
char *p1, *p2;

while(1) {
printf("%s\nの中から検索したいタグを入力してください。\n終了したい場合はendを入力してください。\n", str1);
scanf("%s", str2);
if (!strcmp(str2, "end")) break;
printf("%sタグを検索します。\n", str2);

p1 = strstr(str1, str2);
p2 = strstr(p1 + strlen(str2), str2);
printf("%.*s\n", p2 - p1, p1);
}

return 0;
}
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

strstrに関してご指摘の通りにしか使用したことがございませんでした。
作成してくださったソースを参考にして自分なりに再度試行錯誤してみます。

そしてカテゴリのご指摘ありがとうございます。
現在のプログラムで何か疑問がありましたらそちらで質問いたします。

ご丁寧な回答ありがとうございました。

お礼日時:2009/04/26 14:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!