• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語のタグの抽出について)

C言語のタグの抽出について

このQ&Aのポイント
  • 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>のような表示にされるようにします。
  • 上記のプログラムに対して自分なりにstrstr()とmemcpy()を使用してみましたがうまくいきませんでした。strstr()を用いますと文字列の最初から検索していきますが、第一パラメータでタグ名だけを宣言しますので、前半の<○○>に辿りつきますが、後半の</○○>に辿りつけません。何か良い対策がありましたらよろしくお願いいたします。

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

  • ベストアンサー
noname#227064
noname#227064
回答No.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; }

windy0508
質問者

お礼

回答ありがとうございます。 strstrに関してご指摘の通りにしか使用したことがございませんでした。 作成してくださったソースを参考にして自分なりに再度試行錯誤してみます。 そしてカテゴリのご指摘ありがとうございます。 現在のプログラムで何か疑問がありましたらそちらで質問いたします。 ご丁寧な回答ありがとうございました。

関連するQ&A