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

回答編集履歴

3

丸め処理のコードを追加

2021/04/01 04:08

投稿

kazuma-s
kazuma-s

スコア8222

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> を追加

2021/04/01 04:08

投稿

kazuma-s
kazuma-s

スコア8222

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

+ を * に修正

2021/03/30 18:30

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  こんな複雑な丸めは面倒です。
14
14
  そこで、時刻を 00:00 から m分後という値にしておけば
15
- (m + 4) / 5 + 5 で 5分単位の時刻に切り上げることが簡単にできます。
15
+ (m + 4) / 5 * 5 で 5分単位の時刻に切り上げることが簡単にできます。
16
16
 
17
17
  次のコードを参考にして、理解できませんか?
18
18
  ```C++