teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

5

2019/11/29 07:18

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
File without changes

4

質問文の修正

2019/11/29 07:18

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -19,11 +19,8 @@
19
19
  ・SHOWとINSERTの処理のみ関数にします
20
20
  ・listとその反復子は、大域変数として定義します
21
21
 
22
- 以下のコードまで作成したのですが,わからない点があります.
22
+ 以下のコードまで作成したのですが,コマンド番号4の反復子を次の要素に進める操作が,無効にってしまいます.
23
- ・SHOWの処理の時に,反復子が参照する要素の行の先頭に「 > 」のマークを付けるには,どのようなコードを書けばいいですか?
24
- ・コマンド番号の3と4の処理が正しく実行されないのですが,コードをどのように修正したらよいでしょうか?
25
- 以上の2点について詳しく教えていただきたいです.
26
- また現在のコード修正点があれば,それも教えてください.よろしくお願いします.
23
+ 正しく操作が行われるには,コードをどのように修正したらよいでしょうか?教えてください.よろしくお願いします.
27
24
  ```C++
28
25
  #include <iostream>
29
26
  #include <list>

3

コードの修正

2019/11/29 04:27

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -101,12 +101,16 @@
101
101
 
102
102
  //コマンドが「次の要素」であれば、以下を実行する。
103
103
  case NEXT:
104
+ while (p != busSchedule.end()) {
104
- p++; //反復子が次の要素を参照するようにする
105
+ p++; //反復子が次の要素を参照するようにする
106
+ }
105
107
  break;
106
108
 
107
109
  //コマンドが「前の要素」であれば、以下を実行する。
108
110
  case PREVIOUS:
111
+ while (p != busSchedule.begin()) {
109
- p--; //反復子が前の要素を参照するようにする
112
+ p--; //反復子が前の要素を参照するようにする
113
+ }
110
114
  break;
111
115
  }
112
116
 
@@ -147,8 +151,10 @@
147
151
  list<Arrival>::iterator q;
148
152
  p = busSchedule.begin();
149
153
  for (q = busSchedule.begin(); q != busSchedule.end(); q++) {
154
+ if (q == p) {
155
+ cout << ">";
156
+ }
150
- cout << p->busStopType << " " << p->busStopName << " " << p->time << endl;
157
+ cout << q->busStopType << " " << q->busStopName << " " << q->time << endl;
151
- p++;
152
158
  }
153
159
  }
154
160
 

2

コードの修正

2019/11/29 04:25

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -21,7 +21,7 @@
21
21
 
22
22
  以下のコードまで作成したのですが,わからない点があります.
23
23
  ・SHOWの処理の時に,反復子が参照する要素の行の先頭に「 > 」のマークを付けるには,どのようなコードを書けばいいですか?
24
- ・コマンド番号の3~5の処理が正しく出力されないのですが,コードをどのように修正したらよいでしょうか?
24
+ ・コマンド番号の3と4の処理が正しく実行されないのですが,コードをどのように修正したらよいでしょうか?
25
25
  以上の2点について詳しく教えていただきたいです.
26
26
  また,現在のコードで修正点があれば,それも教えてください.よろしくお願いします.
27
27
  ```C++
@@ -30,7 +30,6 @@
30
30
  #include <string>
31
31
  using namespace std;
32
32
 
33
- #define LINELENGTH 80 //一行の長さ
34
33
  #define SHOW 1 //表示
35
34
  #define INSERT 2 //追加
36
35
  #define DELETE 3 //削除
@@ -65,7 +64,6 @@
65
64
  メイン関数
66
65
  ****/
67
66
  void main() {
68
- char commandLine[LINELENGTH] = "";
69
67
  int type=0;
70
68
  string name, time;
71
69
  string t;

1

コードの修正

2019/11/27 08:46

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -18,13 +18,19 @@
18
18
  ・「反復子がbegin()を参照するときのPREVIOUSコマンド」および「反復子がend()を参照するときのNEXTコマンド」は無効とします
19
19
  ・SHOWとINSERTの処理のみ関数にします
20
20
  ・listとその反復子は、大域変数として定義します
21
+
22
+ 以下のコードまで作成したのですが,わからない点があります.
23
+ ・SHOWの処理の時に,反復子が参照する要素の行の先頭に「 > 」のマークを付けるには,どのようなコードを書けばいいですか?
24
+ ・コマンド番号の3~5の処理が正しく出力されないのですが,コードをどのように修正したらよいでしょうか?
25
+ 以上の2点について詳しく教えていただきたいです.
21
- 以下のコードで作成しのですが残りをどのように書いたら良いのかわからないので,具体的に教えていただきたいです。また,現在のコードで修正点があれば,それも教えてください.よろしくお願いします.
26
+ また,現在のコードで修正点があれば,それも教えてください.よろしくお願いします.
22
27
  ```C++
23
28
  #include <iostream>
24
29
  #include <list>
25
30
  #include <string>
26
31
  using namespace std;
27
32
 
33
+ #define LINELENGTH 80 //一行の長さ
28
34
  #define SHOW 1 //表示
29
35
  #define INSERT 2 //追加
30
36
  #define DELETE 3 //削除
@@ -32,10 +38,6 @@
32
38
  #define PREVIOUS 5 //前の要素
33
39
  #define END 6 //終了
34
40
 
35
- void showMenu(void); //機能の一覧を表示する。
36
- void show();
37
- void insert(string busStopName, int busStopType, string time);
38
-
39
41
  //バス停到着情報クラス
40
42
  class Arrival {
41
43
  public:
@@ -51,6 +53,10 @@
51
53
  }
52
54
  };
53
55
 
56
+ void showMenu(void); //機能の一覧を表示する。
57
+ void show();
58
+ void insert(string busStopName, int busStopType, string time);
59
+
54
60
  // 大域変数
55
61
  list<Arrival> busSchedule; //バス時刻表リスト
56
62
  list<Arrival>::iterator p; //上記を参照する反復子
@@ -59,15 +65,14 @@
59
65
  メイン関数
60
66
  ****/
61
67
  void main() {
62
- string newName; // 新しく加える名称
63
- int newValue; // 新しく加える値
68
+ char commandLine[LINELENGTH] = "";
64
69
  int type=0;
65
70
  string name, time;
66
71
  string t;
67
72
  int command;
68
73
  int busStopType=0; //バス停タイプ
69
74
  string busStopName; //バス停名
70
-
75
+
71
76
  p = busSchedule.end(); //反復子がリスト末尾を指すようにする
72
77
 
73
78
  //機能の一覧を表示する。
@@ -84,51 +89,36 @@
84
89
  switch (command) {
85
90
  case SHOW:
86
91
  show();
87
-
88
92
  break;
89
93
 
90
94
  //コマンドが「追加」であれば、以下を実行する。
91
- case INSERT:
95
+ case INSERT:
92
96
  insert(busStopName,busStopType,time);
93
-
94
97
  break;
95
98
 
96
99
  //コマンドが「削除」であれば、以下を実行する。
97
100
  case DELETE:
98
-
101
+ p = busSchedule.erase(p); //pの参照先を削除、戻り値は次の要素を参照
99
-
100
102
  break;
101
103
 
102
104
  //コマンドが「次の要素」であれば、以下を実行する。
103
105
  case NEXT:
104
-
106
+ p++; //反復子が次の要素を参照するようにする
105
-
106
107
  break;
107
108
 
108
109
  //コマンドが「前の要素」であれば、以下を実行する。
109
110
  case PREVIOUS:
110
-
111
+ p--; //反復子が前の要素を参照するようにする
111
-
112
112
  break;
113
-
114
113
  }
115
-
114
+
116
115
  // 機能の一覧を表示する。
117
116
  showMenu();
118
117
 
119
118
  // コマンド番号を入力する。
120
119
  cout << "コマンド番号=";
121
120
  cin >> command;
122
- }
121
+ }
123
-
124
- p = busSchedule.erase(p); //pの参照先を削除、戻り値は次の要素を参照
125
- p = busSchedule.begin(); //反復子がリスト先頭を指すようにする
126
-
127
- p++; //反復子が次の要素を参照するようにする
128
- p--; //反復子が前の要素を参照するようにする
129
- type = p->busStopType;
130
- name = p->busStopName;
131
- t = p->time;
132
122
  }
133
123
 
134
124
  /*****************************************
@@ -157,13 +147,20 @@
157
147
 
158
148
  void show() {
159
149
  list<Arrival>::iterator q;
150
+ p = busSchedule.begin();
160
151
  for (q = busSchedule.begin(); q != busSchedule.end(); q++) {
161
-
152
+ cout << p->busStopType << " " << p->busStopName << " " << p->time << endl;
153
+ p++;
162
154
  }
163
155
  }
156
+
164
157
  void insert(string busStopName, int busStopType, string time){
165
158
  int type=0;
159
+ // 入力を受け取る
160
+ cout << "バス停タイプ(0:乗車のみ、1:乗降可能、2:降車のみ),バス停名,通過時刻(hh : mmの形式)> ";
161
+ cin >> busStopType; //バス停タイプ
162
+ cin >> busStopName; //バス停名
166
- string name;
163
+ cin >> time;
167
- p = busSchedule.insert(p, Arrival(type, name, time)); //pの参照先の直前に挿入、戻り値は挿入要素を参照
164
+ p = busSchedule.insert(p, Arrival(busStopType, busStopName, time)); //pの参照先の直前に挿入、戻り値は挿入要素を参照
168
165
  }
169
166
  ```