回答編集履歴
3
丸め処理のコードを追加
answer
CHANGED
@@ -67,4 +67,54 @@
|
|
67
67
|
}
|
68
68
|
}
|
69
69
|
```
|
70
|
-
感雨時刻の重複は、終了時刻を更新していくことで解決できるでしょう。
|
70
|
+
感雨時刻の重複は、終了時刻を更新していくことで解決できるでしょう。
|
71
|
+
|
72
|
+
|
73
|
+
**追記**
|
74
|
+
質問に「丸めの関数を修正したコード」が追記されましたが、
|
75
|
+
無駄な記述がたくさんあります。
|
76
|
+
`} else if(s.at(3) == '6' || s.at(3) == '7' || s.at(3) == '8') {`
|
77
|
+
の場合の処理と、
|
78
|
+
`} else if(s.at(3) == '9') {` の場合の処理が全く同じです。
|
79
|
+
なぜ、
|
80
|
+
`} else if(s.at(3) >= '6' && s.at(3) <= '9') {` と一つにまとめないのでしょうか?
|
81
|
+
|
82
|
+
私なら次のように書きます。
|
83
|
+
```C++
|
84
|
+
#include <iostream>
|
85
|
+
#include <string>
|
86
|
+
using namespace std;
|
87
|
+
|
88
|
+
string my_round_start(string s)
|
89
|
+
{
|
90
|
+
s.at(3) = (s.at(3) < '5') ? '0' : '5';
|
91
|
+
return s;
|
92
|
+
}
|
93
|
+
|
94
|
+
string my_round_end(string s)
|
95
|
+
{
|
96
|
+
if (s.at(3) > '5') { // '6' <= s.at(3) <= '9'
|
97
|
+
s.at(3) = '0';
|
98
|
+
if (++s.at(2) == '6') {
|
99
|
+
s.at(2) = '0';
|
100
|
+
if (++s.at(1) > '9') {
|
101
|
+
s.at(1) = '0';
|
102
|
+
++s.at(0);
|
103
|
+
}
|
104
|
+
}
|
105
|
+
}
|
106
|
+
else if (s.at(3) != '0') // '1' <= s.at(3) <= '5'
|
107
|
+
s.at(3) = '5';
|
108
|
+
return s;
|
109
|
+
}
|
110
|
+
|
111
|
+
int main()
|
112
|
+
{
|
113
|
+
string str[] = { "1106-1123", "1129-1203", "1148-1210", "1904-1956" };
|
114
|
+
for (int i = 0; i < 4; i++) {
|
115
|
+
cout << str[i] << endl;
|
116
|
+
cout << my_round_start(str[i].substr(0, 4)) << '-'
|
117
|
+
<< my_round_end(str[i].substr(5, 9)) << endl << endl;
|
118
|
+
}
|
119
|
+
}
|
120
|
+
```
|
2
#include <string> を追加
answer
CHANGED
@@ -18,6 +18,7 @@
|
|
18
18
|
```C++
|
19
19
|
#include <iostream> // cout
|
20
20
|
#include <iomanip> // setfill, setw
|
21
|
+
#include <string> // string
|
21
22
|
#include <vector> // vector
|
22
23
|
#include <algorithm> // sort
|
23
24
|
using namespace std;
|
1
+ を * に修正
answer
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
|
13
13
|
こんな複雑な丸めは面倒です。
|
14
14
|
そこで、時刻を 00:00 から m分後という値にしておけば
|
15
|
-
(m + 4) / 5
|
15
|
+
(m + 4) / 5 * 5 で 5分単位の時刻に切り上げることが簡単にできます。
|
16
16
|
|
17
17
|
次のコードを参考にして、理解できませんか?
|
18
18
|
```C++
|