回答編集履歴

3

丸め処理のコードを追加

2021/04/01 04:08

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -137,3 +137,103 @@
137
137
  ```
138
138
 
139
139
  感雨時刻の重複は、終了時刻を更新していくことで解決できるでしょう。
140
+
141
+
142
+
143
+
144
+
145
+ **追記**
146
+
147
+ 質問に「丸めの関数を修正したコード」が追記されましたが、
148
+
149
+ 無駄な記述がたくさんあります。
150
+
151
+ `} else if(s.at(3) == '6' || s.at(3) == '7' || s.at(3) == '8') {`
152
+
153
+ の場合の処理と、
154
+
155
+ `} else if(s.at(3) == '9') {` の場合の処理が全く同じです。
156
+
157
+ なぜ、
158
+
159
+ `} else if(s.at(3) >= '6' && s.at(3) <= '9') {` と一つにまとめないのでしょうか?
160
+
161
+
162
+
163
+ 私なら次のように書きます。
164
+
165
+ ```C++
166
+
167
+ #include <iostream>
168
+
169
+ #include <string>
170
+
171
+ using namespace std;
172
+
173
+
174
+
175
+ string my_round_start(string s)
176
+
177
+ {
178
+
179
+ s.at(3) = (s.at(3) < '5') ? '0' : '5';
180
+
181
+ return s;
182
+
183
+ }
184
+
185
+
186
+
187
+ string my_round_end(string s)
188
+
189
+ {
190
+
191
+ if (s.at(3) > '5') { // '6' <= s.at(3) <= '9'
192
+
193
+ s.at(3) = '0';
194
+
195
+ if (++s.at(2) == '6') {
196
+
197
+ s.at(2) = '0';
198
+
199
+ if (++s.at(1) > '9') {
200
+
201
+ s.at(1) = '0';
202
+
203
+ ++s.at(0);
204
+
205
+ }
206
+
207
+ }
208
+
209
+ }
210
+
211
+ else if (s.at(3) != '0') // '1' <= s.at(3) <= '5'
212
+
213
+ s.at(3) = '5';
214
+
215
+ return s;
216
+
217
+ }
218
+
219
+
220
+
221
+ int main()
222
+
223
+ {
224
+
225
+ string str[] = { "1106-1123", "1129-1203", "1148-1210", "1904-1956" };
226
+
227
+ for (int i = 0; i < 4; i++) {
228
+
229
+ cout << str[i] << endl;
230
+
231
+ cout << my_round_start(str[i].substr(0, 4)) << '-'
232
+
233
+ << my_round_end(str[i].substr(5, 9)) << endl << endl;
234
+
235
+ }
236
+
237
+ }
238
+
239
+ ```

2

#include <string> を追加

2021/04/01 04:08

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -37,6 +37,8 @@
37
37
  #include <iostream> // cout
38
38
 
39
39
  #include <iomanip> // setfill, setw
40
+
41
+ #include <string> // string
40
42
 
41
43
  #include <vector> // vector
42
44
 

1

+ を * に修正

2021/03/30 18:30

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
  そこで、時刻を 00:00 から m分後という値にしておけば
28
28
 
29
- (m + 4) / 5 + 5 で 5分単位の時刻に切り上げることが簡単にできます。
29
+ (m + 4) / 5 * 5 で 5分単位の時刻に切り上げることが簡単にできます。
30
30
 
31
31
 
32
32