質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

907閲覧

キューに変更するプログラム

fegeryh

総合スコア10

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2021/05/31 11:11

編集2021/06/01 04:45
コード #include <limits.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #define MAX 10 #define NAME_LEN 20 #define String_Max 80 /*--- 身体データ型 ---*/ typedef struct { int height; /* 身長 */ double vision; /* 視力 */ } Body; /*--- 身体検査データ型 ---*/ typedef struct { char *name; /* 氏名 */ Body body; /* 身体データ型 ---*/ } PhysCheck; /*--- int型キューを実現する構造体 ---*/ typedef struct { int max; /* キューの容量 */ int num; /* 現在の要素*/ int front; /* 先頭要素カーソル*/ int rear; /* 末尾要素のカーソル*/ int **que; /* キュー本体*/ } IntQueue; /*--- 身体検査データ型スタックを実現する構造体 ---*/ typedef struct { int max; /* スキューの容量 */ int ptr; /* 現在の要素*/ int *que; /* スキュー本体*/ } ArraylnQueue; /*--- Boyer-Moore 法による文字列探索 ---*/ char *bm_match(char *pat, char *txt) { char *pt; /* txt をなぞるカーソル */ char *pp; /* pat をなぞるカーソル */ int txt_len = strlen(txt); /* txt の文字数 */ int pat_len = strlen(pat); /* pat の文字数 */ int skip[UCHAR_MAX + 1]; /* スキップテーブル */ int i; for (i = 0; i <= UCHAR_MAX; i++) { skip[i] = pat_len; } for (pp = pat; *pp != '\0'; pp++) { skip[*pp] = strlen(pp) - 1; } skip[*(pp - 1)] = pat_len; /* パターンの最後文字の移動距離はパターンの文字数 */ pt = txt + pat_len - 1; /* pat の末尾と比較する txt の文字を決定 */ while ( pt < txt + txt_len) { /* txt の比較する文字の位置が txt の末尾を越えるまで */ pp = pat + pat_len - 1; /* pat の最後の文字に着目 */ while (*pt == *pp) { if (pp == pat) return pt; /* 一致した文字がパターンの最初の文字になれば終了 */ pp--; pt--; } pt += (skip[*pt] > strlen(pp)) ? skip[*pt] : strlen(pp); } return NULL; } /*---キューの初期化 ---*/ int Initialize(IntQueue *q, int max){ q->num = q->front = q->rear = 0; if((q->que=calloc(max,sizeof(int)))==NULL){ q->max = 0; /* 配列の確保に失敗 */ return -1; } q->max = max; return 0; } /*--- キューの後始末 ---*/ void Terminate(IntQueue *s) { if (s->que != NULL) free(s->que); /* 配列の開放 */ s->max= s->num= s->front= s->rear= 0; } /*--- キューにデータをエンキュー ---*/ int Enque(IntQueue *q, int x){ if (q->num >= q->max) return -1; /* キューは満杯 */ else { q->num++; q->que[q->rear++] = x; if (q->rear == q->max) q->rear = 0; return 0; } } /*--- キューからデータをデキュー---*/ int Deque(IntQueue *q, int *x){ if (q->num <= 0)/* キューは空 */ return -1; else { q->num--; *x = q->que[q->front++]; if (q->front == q->max) q->front = 0; return 0; } } /*--- キューからデータをピーク---*/ int Peek(const IntQueue *q, int *x) { if (q->num <= 0) return -1; *x = q->que[q->front]; return 0; } /*--- キューの容量 ---*/ int Capacity(const ArraylnQueue *q) { return q->max; } /*--- スタックに積まれているデータ数 ---*/ int Size(const ArraylnQueue *q) { return q->ptr; } /*--- 身体検査データを1つ表示 ---*/ void OneDataPrint(const PhysCheck *x) { printf("%-18.18s%4d%5.1f\n", x->name, x->body.height, x->body.vision); } /*--- キューの全データの表示 ---*/ void Print(const IntQueue *q) { int i; for(i = 0; i < q->num; i++) printf("%d",q->que[(i+q->front)%q->max]); putchar('\n'); } /*--- スタックのデータにあるパターンの表示とその数を数える ---*/ int Search(ArraylnQueue *q, char *name) { int i, last, num = 0; char *txt, *pat = name; for (i = 0; i < q->ptr; i++) { /* 底から頂上へ */ txt = q->que[i]->name;                   **エラー箇所** while ((txt = bm_match(pat, txt)) != NULL) { num++; txt++; last = i; } } if (num > 0) OneDataPrint(q->que[last]); return num; } int main(void) { IntQueue que; if (Initialize(&que, 64) == -1) { puts("キューの生成に失敗しました.\n"); return 1; } while (1) { int menu, num; PhysCheck x; char name[String_Max]; printf("現在のデータ数:%d/%d\n", Size(&que), Capacity(&que)); printf("(1) エンキュー (2) デキュー (3) ピーク (4) 表示 (5)探索 (0) 終了:"); scanf("%d", &menu); if (menu == 0) break; switch (menu) { case 1: /* エンキュー */ printf("名前: "); scanf("%s", name); x.name = name; printf("身長: "); scanf("%d", &(x.body.height)); printf("視力: "); scanf("%lf", &(x.body.vision)); if (Enque(&que, x) == -1) puts("\a エラー:エンキューに失敗しました。\n"); break; case 2: /* デキュー */ if (Deque(&s, &x) == -1) puts("\a エラー:デキューに失敗しました。\n"); else { printf("デキューしたデータは,"); OneDataPrint(&x); } break; case 3: /* ピーク */ if (Peek(&que, &x) == -1) puts("\a エラー:ピークに失敗しました。\n"); else { printf("ピークしたデータは,"); OneDataPrint(&x); } break; case 4: /* 表示 */ Print(&que); break; case 5: /* 検索 */ printf("探す名前:"); scanf("%s", name); if ((num = Search(&que, name)) > 0) { printf("名前に含まれるパターン数は,%d 個です,\n", num); } else { puts("\a エラー:パターンは存在しません。\n "); } break; } } Terminate(&que); return 0; }

動的スタックのプログラムを,動的なキューに変更したプログラムを書きたいのですがエラーでてしまい解決ができません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/05/31 11:16

Javaは本件とはどう関係するのでしょう。 あと、現象は具体的に、エラーはコピペで提示してください。 そして、調べたこと試したことを記載してください。 https://teratail.com/help/question-tips
fegeryh

2021/05/31 11:20

member reference type 'int' is not a pointer txt=q->que[i]->name; とエラーがでました。
m.ts10806

2021/05/31 22:45

知りません。Javaは本件とはどう関係するのでしょう。 で、回答ついたのに質問編集して意味が分かりません。とりあえず悪質行為ですね。
K_3578

2021/06/01 00:27 編集

質問に回答付いたら質問編集して改変するような人なので通報だけしてスルーを推奨します。
guest

回答1

0

ベストアンサー

txt = q->que[i]->name; 

ArrayInQue のメンバ:que は int* だから q->que[i] の型は int。
int に対し ->name すれば、そりゃエラーになるやろ。

投稿2021/05/31 13:10

episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fegeryh

2021/05/31 14:00

どのように変えればいいか教えてください
episteme

2021/05/31 14:19

あなたの書いた txt = q->que[i]->name が何を意図しているかがわからんので教えようがありません
episteme

2021/05/31 23:44

質問を抹消するとは無礼な奴だ...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問