質問編集履歴
5
    
        title	
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        body	
    CHANGED
    
    | 
         
            File without changes
         
     | 
4
質問文の修正
    
        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
コードの修正
    
        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 
     | 
    
         
            -
             
     | 
| 
      
 105 
     | 
    
         
            +
            				p++;		//反復子が次の要素を参照するようにする
         
     | 
| 
      
 106 
     | 
    
         
            +
            			}
         
     | 
| 
       105 
107 
     | 
    
         
             
            			break;
         
     | 
| 
       106 
108 
     | 
    
         | 
| 
       107 
109 
     | 
    
         
             
            			//コマンドが「前の要素」であれば、以下を実行する。
         
     | 
| 
       108 
110 
     | 
    
         
             
            		case PREVIOUS:
         
     | 
| 
      
 111 
     | 
    
         
            +
            			while (p != busSchedule.begin()) {
         
     | 
| 
       109 
     | 
    
         
            -
             
     | 
| 
      
 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 <<  
     | 
| 
      
 157 
     | 
    
         
            +
            			cout << q->busStopType << " " << q->busStopName << " " << q->time << endl;		
         
     | 
| 
       151 
     | 
    
         
            -
            			p++;
         
     | 
| 
       152 
158 
     | 
    
         
             
            		}
         
     | 
| 
       153 
159 
     | 
    
         
             
            	}
         
     | 
| 
       154 
160 
     | 
    
         | 
2
コードの修正
    
        title	
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        body	
    CHANGED
    
    | 
         @@ -21,7 +21,7 @@ 
     | 
|
| 
       21 
21 
     | 
    
         | 
| 
       22 
22 
     | 
    
         
             
            以下のコードまで作成したのですが,わからない点があります.
         
     | 
| 
       23 
23 
     | 
    
         
             
            ・SHOWの処理の時に,反復子が参照する要素の行の先頭に「 > 」のマークを付けるには,どのようなコードを書けばいいですか?
         
     | 
| 
       24 
     | 
    
         
            -
            ・コマンド番号の3 
     | 
| 
      
 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
コードの修正
    
        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 
     | 
    
         
            -
            	 
     | 
| 
      
 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 
     | 
    
         
            -
            		 
     | 
| 
      
 163 
     | 
    
         
            +
            		cin >> time;		
         
     | 
| 
       167 
     | 
    
         
            -
            		p = busSchedule.insert(p, Arrival( 
     | 
| 
      
 164 
     | 
    
         
            +
            		p = busSchedule.insert(p, Arrival(busStopType, busStopName, time)); //pの参照先の直前に挿入、戻り値は挿入要素を参照
         
     | 
| 
       168 
165 
     | 
    
         
             
            	}
         
     | 
| 
       169 
166 
     | 
    
         
             
            ```
         
     |