![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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()を用いますと文字列の最初から検索していきますが
第一パラメータでタグ名だけを宣言しますので
前半の<○○>に辿りつきますが、後半の</○○>に辿りつけません。
何か良い対策がありましたらよろしくお願いいたします。
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;
}
回答ありがとうございます。
strstrに関してご指摘の通りにしか使用したことがございませんでした。
作成してくださったソースを参考にして自分なりに再度試行錯誤してみます。
そしてカテゴリのご指摘ありがとうございます。
現在のプログラムで何か疑問がありましたらそちらで質問いたします。
ご丁寧な回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQLにて特定の文字を除いた検索...
-
sqlで、600行あるテーブルを100...
-
Unionした最後にGROUP BYを追加...
-
SQLサーバから、項目の属性(型...
-
MySQLのDATE型カラム値がNULLの...
-
所有格の意味
-
クエリ表示と、ADOで抽出したレ...
-
OracleでINSERT文のループ
-
DB設計について
-
親と子供が複数のSQL取得方法
-
PL/SQLの変数について
-
select文のwhere句に配列を入れ...
-
Postgreのupdateコマンドでエラー
-
複数テーブルのGROUP BY の使い...
-
「Duplicate entry '1' for key...
-
INで抽出した順番に並び替え(S...
-
insertを高速化させたい
-
SELECT文で片方のテーブルを優...
-
ローカルルーターモードとは
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
SQLサーバから、項目の属性(型...
-
副問合せの書き方について
-
VIEWの元のテーブルのindexって...
-
エクセルの関数について教えて...
-
SQLにて特定の文字を除いた検索...
-
マイクラPC版のコマンドで効率...
-
select文のwhere句に配列を入れ...
-
sqlで、600行あるテーブルを100...
-
ある条件の最大値+1を初番する...
-
inner joinをすると数がおかし...
-
Unionした最後にGROUP BYを追加...
-
期間の重複を調べるSQL文につい...
-
クエリ表示と、ADOで抽出したレ...
-
Access パラメータクエリをcsv...
-
PL/SQLの変数について
-
MySQLのDATE型カラム値がNULLの...
-
php+mysqlで複数選択削除について
-
上位3位を求めるSQL文は?
おすすめ情報