C言語関係掲示板

過去ログ

No.414.構造体同士の比較

[戻る] [ホームページ]
No.2884

構造体同士の比較
投稿者---RSF(2002/10/08 00:56:35)


struct data_list {
int index;
char name[20]; /* 名前 */
struct data_list *next; /* 次のデータへのポインタ */
};

struct table_list {
int key;
char str[20]; /* 名前 */
struct table_list *next; /* 次のデータへのポインタ */
};

このような構造体を2個用意して、main文でそれぞれに値を代入したあとに、これら2個の構造体の値を比較することってできるのでしょうか?
table_listの構造体にある名前がdata_listに存在するかどうか?
というような比較を行いたいのですが。

この自己参照構造体のところは、難しくてよくわかりづらいので、アドバイスよろしくお願い致します。



No.2896

Re:構造体同士の比較
投稿者---かずま(2002/10/09 15:50:08)


値の代入は省略して、比較だけを行っていますが、参考になりますか?
#include <stdio.h>
#include <string.h>
 
struct data_list {
    int index; 
    char name[20];
    struct data_list *next;
};

struct table_list {
    int key; 
    char str[20];
    struct table_list *next;
};

struct data_list d4 = { 4, "Bob",    NULL };
struct data_list d3 = { 3, "Mary",    &d4 };
struct data_list d2 = { 2, "Alice",   &d3 };
struct data_list d1 = { 1, "Charlie", &d2 };

struct table_list t3 = { 6, "Jack", NULL };
struct table_list t2 = { 5, "David", &t3 };
struct table_list t1 = { 2, "Alice", &t2 };

int main()
{
    struct table_list *tp;
    struct data_list  *dp;

    for (tp = &t1; tp != NULL; tp = tp->next)
        for (dp = &d1; dp != NULL; dp = dp->next)
            if (strcmp(dp->name, tp->str) == 0)
                printf("%s found\n", dp->name);
    return 0;
}


No.2912

Re:構造体同士の比較
投稿者---RSF(2002/10/11 00:24:07)


>値の代入は省略して、比較だけを行っていますが、参考になりますか?

ありがとうございました。とても勉強になりました。
かずまさんのソースはもちろん実行できたのですが、
第15章のサンプルプログラムを元に私もやってみたのですが、
実行できませんでした。

struct data_list {
int index;
char name[20];
struct data_list *next;
};

struct table_list {
int key;
char str[20];
struct table_list *next;
};
の、構造体を用意して、main文で値を代入して、

int main()
{
  struct table_list *top = NULL;
struct data_list *head = NULL;

struct table_list *tp;
struct data_list *dp;

for (tp = top; tp != NULL; tp = tp->next)
for (dp = head; dp != NULL; dp = dp->next)
if (strcmp(dp->name, tp->str) == 0)
printf("%s found\n", dp->name);
return 0;
}

のようにやってみたのですけれども。

再びですいませんが、アドバイスよろしくお願い致します。

No.2937

Re:構造体同士の比較
投稿者---しろうと++(2002/10/14 21:41:22)


横槍ですみませんが
ソースを見た限りでコメントさせていただきます。

>struct data_list {
> int index;
> char name[20];
> struct data_list *next;
>};
>
>struct table_list {
> int key;
> char str[20];
> struct table_list *next;
>};
>の、構造体を用意して、main文で値を代入して、
>
>int main()
>{
>  struct table_list *top = NULL;
> struct data_list *head = NULL;
>
↑では値を代入したことにはなっていませんが。。

> struct table_list *tp;
> struct data_list *dp;
>
> for (tp = top; tp != NULL; tp = tp->next)
※tpにtopを代入していますがtopはNULLなので
 tpにNULLが代入されて、このループの終了条件を満たします。
 よってループを抜けます。
> for (dp = head; dp != NULL; dp = dp->next)
> if (strcmp(dp->name, tp->str) == 0)
> printf("%s found\n", dp->name);
> return 0;
>}
>
>のようにやってみたのですけれども。
>
>再びですいませんが、アドバイスよろしくお願い致します。

※部分の前にtopやdopに構造体の要素としての値をいれておかないと、
比較を行う前にループを抜けてしまいますよ。